我正在使用带有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;
}
}
答案 0 :(得分:0)
覆盖第二个片段中的方法。请遵循以下模板:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if(isResumed() && isVisibleToUser) {
//Update your data
} else {
//Do nothing
}
}
答案 1 :(得分:0)
您可以在notifyDataSetChanged()
上致电PagerAdapter
,使用新数据刷新片段。
答案 2 :(得分:0)
单击按钮后,您可以在SharedPreferences
或database
中写入标记。当您返回第二个片段时,检查标记是否退出并刷新数据。