2016-08-01 5 views
0

Я работаю над модулем E-com. Я реализовал два фрагмента в Activity.One (HomeFragment) загружается в пределах активности в контейнере, а другой (CartFragment) загружает onClick значок корзины, размещенный на панель инструментов. Теперь каждый раз, когда я нажимаю на значок корзины, тот же самый фрагмент загружается снова и снова, и это нормально, я хочу, чтобы он был таким же образом. Но теперь я хочу, сколько бы раз я не загружал один и тот же фрагмент, но при нажатии кнопки возврата он должен идти на главном экране. Теперь, когда я нажимаю клавишу возврата, он возвращает все загруженные фрагменты. Как я должен это решить. Пожалуйста помоги.Обращение с экземпляром фрагмента

КОД В КОНТЕКСТЕ:

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

Я не знаю [этот ответ] (http://stackoverflow.com/a/5984892/1595442) может помочь вам, но может быть вам полезен. – faranjit

ответ

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

Ничего не происходит. Я пробовал это –

0

Для этого вам понадобится два контейнера с фрагментами. Просто переключите видимость необходимых фрагментов!

Смежные вопросы