2016-08-01 27 views
0

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; 
    } 



} 
+1

Ich weiß nicht [diese Antwort] (http://stackoverflow.com/a/5984892/1595442) kann Ihnen helfen, kann aber nützlich für Sie sein. – faranjit

Antwort

0
Try changing your onBackPressed() implementation to 

@Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 1){ 
      while(getFragmentManager().getBackStackEntryCount() > 1){ 
       getFragmentManager().popBackStack(); 
      } 
     } else { 
      super.onBackPressed(); 
     } 
    } 
+0

Nichts passiert. Ich habe es versucht –

0

Sie benötigen zwei Fragmentcontainer, um dies zu erreichen. Schalten Sie einfach die Sichtbarkeit der benötigten Fragmente um!