滚动时刷新选项卡片段页面

时间:2014-02-06 06:12:27

标签: android android-fragments tabs

我在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_idUserItemsFragment) :

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错误:(

有人能指出我做错了吗?

1 个答案:

答案 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();
    }
}