Ich arbeite an einem E-COM-Modul.Ich habe zwei Fragmente in einer Aktivität.Eine (HomeFragment) wird innerhalb der Aktivität in Container geladen und eine andere (CartFragment) wird geladen onClick
des Warenkorb-Symbols platziert auf Symbolleiste. Jetzt jedes Mal, wenn ich auf das Einkaufswagensymbol klicke, wird das gleiche Fragment immer wieder geladen, was in Ordnung ist. Ich will es auf die gleiche Weise. Aber jetzt will ich egal, wie oft ich das gleiche Fragment lade, aber beim Zurückdrücken sollte es losgehen auf dem home screen.Right jetzt, wenn ich zurück Schlüssel drücke, gibt es alle geladenen Fragmente zurück. Wie soll ich das lösen? Bitte Hilfe.Handling Instance of Fragment
CODE IN ZUSAMMENHANG:
MainActivity
public class MainActivity extends AppCompatActivity implements HomeFragment.OnAdd,HomeFragment.OnDel,FragmentManager.OnBackStackChangedListener{
private int count = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
HomeFragment blank = new HomeFragment();
fragmentTransaction.add(R.id.frame, blank);
fragmentTransaction.commit();
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0){
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
//----------------CART ICON---------------------//
MenuItem item1=menu.findItem(R.id.cart);
item1.setIcon(buildCounterDrawable(count, R.mipmap.cart));
//----------------SPINNER ICON------------------//
MenuItem item = menu.findItem(R.id.spinner);
Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spinner_list_item_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_list_item_activated_1);
spinner.setAdapter(adapter);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.cart) {
CartFragment myDetailFragment = new CartFragment();
Bundle bundle = new Bundle();
myDetailFragment.setArguments(bundle);
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.activity_main, myDetailFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
return true;
}
return super.onOptionsItemSelected(item);
}
//---------------------------INFLATING BADGE------------------------------//
private Drawable buildCounterDrawable(int count, int backgroundImageId) {
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.counter_menuitem_layout, null);
view.setBackgroundResource(backgroundImageId);
if (count == 0) {
View counterTextPanel = view.findViewById(R.id.counterValuePanel);
counterTextPanel.setVisibility(View.GONE);
} else {
TextView textView = (TextView) view.findViewById(R.id.count);
textView.setText("" + count);
}
view.measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
view.setDrawingCacheEnabled(true);
view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.setDrawingCacheEnabled(false);
return new BitmapDrawable(getResources(), bitmap);
}
@Override
public void onActionPerformedAdd(int count1) {
count++;
invalidateOptionsMenu();
}
@Override
public void onActionPerformedDel(int count1) {
if (count>0){
count--;
invalidateOptionsMenu();
}
}
@Override
public void onBackStackChanged() {
}
}
HomeFragment
public class HomeFragment extends Fragment {
public HomeFragment() {
// Required empty public constructor
}
private Button add,del;
private int count = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_home, container, false);
add=(Button)view.findViewById(R.id.add);
del=(Button)view.findViewById(R.id.minus);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((OnAdd)getActivity()).onActionPerformedAdd(count);
}
});
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((OnDel)getActivity()).onActionPerformedDel(count);
}
});
return view;
}
public interface OnAdd{
void onActionPerformedAdd(int count);
}
public interface OnDel{
void onActionPerformedDel(int count);
}
}
CartFragment
public class CartFragment extends Fragment {
public CartFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_cart, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);
return view;
}
}
Ich weiß nicht [diese Antwort] (http://stackoverflow.com/a/5984892/1595442) kann Ihnen helfen, kann aber nützlich für Sie sein. – faranjit