无法在ViewPager内部替换片段



我有一个片段收藏为:[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)实例是公共的。

最新更新