【问题标题】:How to refresh fragment in FragmentPagerAdapter如何在 FragmentPagerAdapter 中刷新片段
【发布时间】:2017-08-24 09:24:41
【问题描述】:

我在 1 个活动中有 4 个片段。我需要确保在每个片段更改时刷新片段,因为我在每个片段中加载 JSON 数据。我使用 FragmentPager Adapter 和 RecyclerView 来显示数据

这是我的适配器 (SickAdapter.java) 的代码:

public class SickAdapter extends FragmentPagerAdapter{

    private static final String TAG = SickAdapter.class.getSimpleName();

    private static final int FRAGMENT_COUNT = 4;

    public SickAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                return new SickFragmentToAll();
            case 1:
                return new SickFragmentToPending();
            case 2:
                return new SickFragmentToApproved();
            case 3:
                return new SickFragmentToDenied();
        }
        return null;
    }

    @Override
    public int getCount() {
        return FRAGMENT_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case 0:
                return "All";
            case 1:
                return "Pending";
            case 2:
                return "Approved";
            case 3:
                return "Denied";
        }
        return null;
    }
}

在我的类 (SickClass.java) 中,我创建 SickClass 并调用 SickAdapter,我将它们分解,这是我的代码:

public class SickClass extends Fragment {

    private static final String TAG = SickClass.class.getSimpleName();

    private SickAdapter mAdapter;
    private TabLayout tabLayout;
    private ViewPager viewPager;


    public SickClass() {
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.employee_leave_class, container, false);

        tabLayout = (TabLayout)view.findViewById(R.id.tabs);
        viewPager = (ViewPager)view.findViewById(R.id.view_pager);

        if(mAdapter == null) {
            mAdapter = new SickAdapter(getChildFragmentManager());
        }
        viewPager.setAdapter(new SickAdapter(getChildFragmentManager()));
        tabLayout.setupWithViewPager(viewPager);
        viewPager.setCurrentItem(1, true);

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewPager);
            }
        });

        return view;
    }

}

【问题讨论】:

  • 使用FragmentStatePagerAdapter

标签: java android android-fragments fragmentpageradapter


【解决方案1】:

尝试以下代码重新加载您的片段;

  FragmentTransaction ft = getFragmentManager().beginTransaction();
  ft.detach(YOUR_FRAGMENT_NAME.this).attach(YOUR_FRAGMENT_NAME.this).commit();

【讨论】:

  • 在 Fragment 类中,您要重新加载的地方
  • 你能给我举个例子吗?
【解决方案2】:

您可以使用startActivityForResult() 从活动中获取结果。

参考资料:

ViewPager PagerAdapter not updating the View

How to refresh a Fragment of a FragmentPagerAdapter?

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多