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



我正在使用具有5个片段的ViewPager和TabLayout。如果我单击第一个或第三个片段中的按钮,则显示我的代码,第二个片段中的数据。但是ViewPager已经制作了上一页和下一页,因此第二个片段不会直接更新。第二个片段具有列表视图,并按常规顺序显示数据。当我转到第四或第五个片段并返回第二个片段时,数据更新了。因为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;
}

}

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

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

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

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

最新更新