【发布时间】:2016-03-18 13:25:46
【问题描述】:
我在我的应用程序中使用 TabLayout 作为选项卡式视图。我添加了三个列表片段 - 每个选项卡一个。
当从任何片段中添加/删除新记录时,应该更改任何片段的内容(并且必须更新列表视图)。
但是在我修改了一些数据并滑动到下一个选项卡后,列表视图没有更新并保留了旧数据。
我创建了一个在所有 ListFragments 中实现的接口,如下所示:
public interface UpdatableFragment {
void updateContent();
}
public class LogFragment implements UpdatableFragment{
...
@Override
public void updateContent() {
Activity activity = getActivity();
if (isAdded() && activity != null) {
getLoaderManager().restartLoader(LOG_LIST_LOADER, null, this);
}
}
...
}
我在 MainActivity 选项卡中调用方法选择监听器
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if(adapter != null){
int position = viewPager.getCurrentItem();
viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setCurrentItem(position);
Fragment tabbedFragment = adapter.getItem(viewPager.getCurrentItem());
if(tabbedFragment instanceof UpdatableFragment){
((UpdatableFragment) tabbedFragment).updateContent();
}
}
}
但 updateContent() 方法中的条件 if (isAdded() && activity != null) 有时会返回 false,因为活动变为空。在其他时候,它返回 MainActivity 实例并且加载器重新启动。
为什么会发生这种不一致的行为?如何让 ListFragments 在选择其对应的选项卡时始终显示新鲜内容?
编辑 添加片段寻呼机代码
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
【问题讨论】:
标签: android listview android-fragments tabs