2016-08-01 8 views
0

私はE-comモジュールで作業しています。アクティビティに2つのフラグメントを実装しました.1つ(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

これを達成するには、2つのフラグメントコンテナが必要です。必要なフラグメントの可視性をトグルするだけです!

関連する問題