如何直接在ViewPager中更新下一个片段的数据?

时间:2018-03-07 01:56:23

标签: android android-fragments android-viewpager

我正在使用带有5个片段的ViewPager和TabLayout。我的代码显示我是否点击了第一个或第三个片段中的按钮,第二个片段中的数据。但是ViewPager已经创建了上一页和下一页,因此第二个片段不会直接更新。第二个片段具有ListView并按正常顺序显示数据。当我转到第四或第五个片段并返回第二个片段时,数据更新。因为ViewPager新绘制了第二个片段。

我发现了很多关于这个问题的信息。很多人说要解决它,我应该使用'setUserVisibleHint'。但我不知道如何在我的情况下使用该功能。

要解决这个问题,我必须使用'setUserVisibleHint'?那我该怎么申请呢?

还是有其他方法吗?

这是我的第二个片段代码。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.accesslog_layout, container, false);

    adapter = new ListViewAdapter(getActivity().getApplicationContext());

    listView = (ListView) view.findViewById(R.id.Accesslog_listView);
    emptyElement = (TextView) view.findViewById(R.id.empty_element);

    listView.setAdapter(adapter);
    listView.setOnItemLongClickListener(itemLongClickListener);
    listView.setEmptyView(emptyElement);

    check_editName = (TextView) view.findViewById(R.id.Room_State);
    listView.setOverScrollMode(view.OVER_SCROLL_ALWAYS);

    accessTable = AccessTable.instance();//(getActivity().getApplicationContext());

    logD(TAG, "TestTable Dbug===Fragment====AccessLog============ ");

    loadAllFromDB();

    return view;
}

==================================更新============ ======================

我应该在哪里放置代码“getItemPosition()”和“notifyDataSetChanged()”?

这是我的适配器代码。

public class TabPagerAdapter extends FragmentStatePagerAdapter {

private int tabCount;

public TabPagerAdapter(FragmentManager fm, int tabCount){

    super(fm);
    this.tabCount = tabCount;

}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
} // Here is right? and is this right code?

@Override
public Fragment getItem(int position){

    switch (position){
        case 0:
            HomeFragment fragment1 = new HomeFragment();
            return fragment1;

        case 1:
            AccessLogFragment fragment2 = new AccessLogFragment();
            return fragment2;

        case 2:
            RegistrationFragment fragment3 = new RegistrationFragment();
            return fragment3;

        case 3:
            SettingFragment fragment4 = new SettingFragment();
            return fragment4;

        case 4:
            HelpFragment fragment5 = new HelpFragment();
            return fragment5;

        default:
            return null;
    }

}

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

}

3 个答案:

答案 0 :(得分:0)

覆盖第二个片段中的方法。请遵循以下模板:

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        if(isResumed() && isVisibleToUser) {
            //Update your data
        } else {
            //Do nothing
        }
    }

答案 1 :(得分:0)

您可以在notifyDataSetChanged()上致电PagerAdapter,使用新数据刷新片段。

答案 2 :(得分:0)

单击按钮后,您可以在SharedPreferencesdatabase中写入标记。当您返回第二个片段时,检查标记是否退出并刷新数据。