我正在努力找出下一步该做什么。
我的现状:我有一个ViewPager,并且其中包含几个页面。在这个问题中,只有两个页面是重要的,我们称它们为Fragment1和Fragment2,它们相邻。Fragment1包含一个列表视图,该列表视图填充了来自互联网(外部数据库)的数据。 Fragment2包含一个简单的按钮。
我的目标:如果我在Fragment2中点击按钮,则会向外部数据库添加新项目。我希望使用这个新项目更新/刷新Fragment1中的列表视图。
notifyDataChanged()
在我的情况下不起作用,然而到目前为止,我一直认为它会重新实例化每个页面... 我将以最清晰的方式介绍我的问题,让我们看看我拥有的代码,这是我的ViewPager
适配器:
class MyPagerAdapter extends FragmentStatePagerAdapter {
public List<String> fragmentsA;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
fragmentsA = fragments;
}
@Override
public Fragment getItem(int position) {
return Fragment.instantiate(context, fragmentsA.get(position));
}
@Override
public CharSequence getPageTitle(int position) {
return mEntries.get(position % CONTENT.length).toUpperCase();
}
@Override
public int getCount() {
return mEntries.size();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
Fragment1的onCreateView()(简短地):
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
getData();
View view = inflater.inflate(R.layout.latestapps_tab, container, false);
lw = (ListView) view.findViewById(R.id.lw);
context = getActivity().getApplicationContext();
act = this.getActivity();
m_adapter = new ItemAdapter();
lw.setAdapter(m_adapter);
return view;
}
我创建了 ViewPager
和适配器,然后将适配器设置到 ViewPager
中,在主类中用碎片填充我的视图页。完成后,我将拥有一个具有 2 个碎片的完全功能的 ViewPager。
pager = (ViewPager)findViewById( R.id.viewpager );
adapter = new MyPagerAdapter(getSupportFragmentManager());
indicator = (TabPageIndicator)findViewById( R.id.indicator );
pager.setAdapter( adapter );
indicator.setViewPager( pager );
pager.setCurrentItem(INITIAL_PAGE);
pager.setOffscreenPageLimit(3);
//adding fragments to the pager
fragments.add( Fragment1.class.getName());
fragments.add( Fragment2.class.getName());
在 Fragment1 中,我有一个带有一些文本视图的列表视图。加载工作完美:我创建了 ArrayLists
并用来自外部数据库的数据填充这些列表。加载完成后,我使用这些大量数据填充列表视图。
在 Fragment 2 中,我点击按钮,希望更新该列表视图,以便在列表视图中创建一个新行,并从外部数据库获取一些数据。(当然,写入到数据库是有效的)
我的猜测是,我可能没有刷新 ArrayLists,或者我没有重新实例化 Fragment1,所以 getDataFromSQL() 方法从不返回,除非我退出并重新启动应用程序,或者我在 ViewPager 中滑动太多次,使 Fragment1 被分离。因此,我无法更新或刷新 Fragment1。有人能在这个问题上提供帮助吗?
编辑
我设法通过向 Fragment2 传递消息来更新它自己。但我不确定这是否是一个好的解决方案,是否有更好的方法,例如只是在某种方式下刷新整个 Fragment。
解决方案
好的,我想这一定是我的懒惰,但现在我解决了它。对于仍然想要从另一个片段刷新片段或仅在片段之间建立连接的所有人,我告诉你适当的方法:
您必须实现自己的监听器,该监听器通过 holder activity 帮助您在片段之间通信。这可以在此处找到:http://developer.android.com/training/basics/fragments/communicating.html非常简单和有用。
您必须检索片段,这也很简单:Retrieve a Fragment from a ViewPager 这些问题提供了几种可接受的方式,我使用了
SpareArray
解决方案。
无论如何,谢谢您的帮助!