【问题标题】:Unable to replace fragment inside ViewPager [duplicate]无法替换 ViewPager 中的片段 [重复]
【发布时间】:2018-03-10 21:58:34
【问题描述】:

我有一个片段集合: [片段1][片段2][片段3]

我正在使用 ViewPager 和 FragmentPagerAdapter。当单击 Fragment2 中的视图时,我要做的是将 Fragment2 替换为另一个片段(我们称之为 Fragment4)。我正在使用如下代码:

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 时,它会检测到单击但无法更改片段。知道怎么做吗?谢谢

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    除了Kingfisher Phuocr answer,你可以在这个方法中改变片段

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

    【讨论】:

    • 即使在调用 notifyDataSetChanged() 后我也无法更改视图
    • 好的,等一下。我正在努力。
    • 查看我的另一个答案。
    【解决方案2】:

    我认为这应该在您的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;
    }
    }
    

    每次你想改变你的viewpager片段,你可以调用:

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

    【讨论】:

    • 但是我如何从 fragment4 onBackPressed() 返回到 fragment2?谢谢
    • 我无法替换片段,即使在通知适配器之后
    【解决方案3】:

    这里是修复:

    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) 实例是公开的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      相关资源
      最近更新 更多