我在ViewPager中有3个片段标签。
Fragment1包含ListFragment,Fragment2也包含ListFragment。
单击Fragment2中的项目后,应该转到Fragment1并刷新List。 (该列表通过使用Gson的Web服务填充)。所以Fragment2将一个值传递给Fragment1,以便它可以根据携带的参数重新加载。
我尝试了很多方法来刷新/更新Fragment1中List的状态,包括使用onCreateView
重新加载整个Fragment1 FragmentTransaction
,并在其自身内调用主机Activity
。仍然找不到办法。
此外,我注意到在滚动到选项卡3并返回选项卡1时,它会刷新它。但它没有刷新从选项卡2到选项卡1的列表。我在SO中找到一个解决方案建议设置viewpager.setOffscreenPageLimit(0);
,问题仍然存在。
这是我目前的代码。
在Host活动(UserShopActivity
)中,我实现了Fragment2(UserCategoriesFragment
)的接口侦听器,以获取要传递给Fragment1的category_id
(UserItemsFragment
) :
public class UserShopActivity extends FragmentActivity implements
UserCategoriesFragment.OnUserCategoriesSelectedListener {
...
@Override
public void onUserCategoriesSelected(String category_id) {
setTabUserItems(category_id);
String userItemsFragment = getTabUserItems();
UserItemsFragment uif = (UserItemsFragment) this.getSupportFragmentManager().findFragmentByTag("android:switcher:"+R.id.pager+":0");
if (uif == null) {
setSaveToUserItems(category_id);
Log.d("userItemFragment: ", "null");
} else {
setSaveToUserItems(category_id);
uif.updateCat(category_id);
Log.d("cat id sent: ", userItemsFragment);
mViewPager.setCurrentItem(0);
}
}
}
我已成功通过category_id
。在调用setCurrentItem(0)
后,它将转到Fragment1。这是我想重新加载列表的地方。但是如何?
在TabAdapter中,我实现了ViewPager.OnPageChangeListener
并覆盖onPageSelected
方法。我相信这是我应该进行刷新编码的地方。
我也试过像这样刷新Fragment2:
@Override
public void onPageSelected(int i) {
Log.d("onPageSelected: ", i + "");
mActionBar.setSelectedNavigationItem(i);
if(i == 0) {
UserItemsFragment uif = new UserItemsFragment();
uif.reload();
}
}
在reload()
之类的内容:
public void reload(){
// re-call the fragment from within itself
}
但是,我遇到nullpointerexception
错误:(
有人能指出我做错了吗?
答案 0 :(得分:0)
试试这个:
@Override
public void onPageSelected(int i) {
Log.d("onPageSelected: ", i + "");
mActionBar.setSelectedNavigationItem(i);
if(i == 0) {
UserItemsFragment frg = (UserItemsFragment)mAdapter.instantiateItem(viewPager, i);
frg.reload();
}
}