2017-09-29 6 views
2

Ich habe ein Sammlungen von Fragment bekam wie: [Fragment1] [Fragment2] [Fragment3]Unable Fragment innerhalb ViewPager ersetzen

Ich verwende ViewPager und FragmentPagerAdapter. Was ich versuche ist, Fragment2 durch ein anderes Fragment (nennen wir es Fragment4) zu ersetzen, wenn auf eine Ansicht innerhalb von Fragment2 geklickt wird. Ich verwende den Code wie folgt:

newMsgBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       swapFragment(new Fragment4()); 
      } 
     }); 
    private void swapFragment(Fragment fragment){ 
     FragmentTransaction fragmentTransaction = ((FragmentActivity)getContext()).getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.view_container,fragment); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } 

Dann, wenn ich auf dem newMsgBtn geklickt, den Klick erkennen, aber es ist nicht in der Lage, das Fragment zu ändern. Irgendeine Idee, wie man das macht? danke

Antwort

0

Ich denke, das sollte in Ihrem FragmentStatePagerAdapter getan werden. Sie sollten, wie etwas tun:

new FragmentStatePagerAdapter(fm) { 
public int getCount() { 
    return fragments.size(); // the fragments list 
} 

public Fragment getItem(int position) { 
    return fragments.get(position); 
} 

public int getItemPosition(Object item) { 
     return POSITION_NONE; 
} 
} 

Jedes Mal, wenn Sie möchten, dass Ihre viewpager Fragment ändern, können Sie anrufen:

fragments.remove(1); //remove your fragment 2 
fragments.add(1,fragment4); // add your fragment4 into the 2 position 
viewPagerAdapter.notifyDataSetChanged(); 
+0

aber wie gehe ich zurück zu fragment2 von fragment4 onBackPressed()? Danke – VincentTheonardo

+0

Ich kann das Fragment nicht ersetzen, selbst nachdem ich den Adapter notified – VincentTheonardo

1

Neben Eisvogel Phuocr answer Sie das Fragment in diesem Verfahren ändern können

@Override 
public void onBackPressed() { 
    ArrayList myList = FragmentStatePagerAdapter.customFragmentsArrayList.remove(position); 
    myList.add(position,new Fragment_Number()); //i.e. your fragment number 
    viewPagerAdapter.notifyDataSetChanged(); 
} 
+0

Ich kann die Ansicht nicht sogar ändern, nachdem ich notifyDataSetChanged() – VincentTheonardo

+0

in Ordnung gekommen habe, warte. Ich arbeite daran. – Dennis

+0

Schau dir meine andere Antwort an. – Dennis

0

Hier ist der fix:

private void changeFragment(Fragment fragment) { 
    MainActivity activity = (MainActivity) getActivity(); 
    activity.adapter.fragmentList.remove(0); 
    activity.adapter.fragmentTitleList.remove(0); 
    activity.adapter.fragmentList.add(0,fragment); 
    activity.adapter.fragmentTitleList.add(0,fragment.getClass().getSimpleName()); 
    activity.pager.getAdapter().notifyDataSetChanged(); 
} 

Stellen Sie sicher, dass Sie adapter Objekt und pager (ViewPager) Instanz öffentlich sind.

Verwandte Themen