我有一个片段收藏为:[fragment1] [fragment2] [fragment3]
我正在使用ViewPager和FragmentPagerAdapter。我要做的是将fragment2替换为另一个片段(我们称其为fragment4),当单击fragment2中的视图时。我正在使用以下代码:
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();
}
然后,当我单击newmsgbtn时,它会检测到单击,但无法更改片段。知道该怎么做吗?谢谢
除了翠鸟phuocr答案外,您还可以更改此方法中的片段
@Override
public void onBackPressed() {
ArrayList myList = FragmentStatePagerAdapter.customFragmentsArrayList.remove(position);
myList.add(position,new Fragment_Number()); //i.e. your fragment number
viewPagerAdapter.notifyDataSetChanged();
}
我认为这应该在您的FragmentStatePagerAdapter
中完成。您应该做类似的事情:
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;
}
}
每次您想更改视图片段时,都可以致电:
fragments.remove(1); //remove your fragment 2
fragments.add(1,fragment4); // add your fragment4 into the 2 position
viewPagerAdapter.notifyDataSetChanged();
这是修复:
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();
}
确保您的adapter
对象和pager
(ViewPager)实例是公共的。