我在ViewPager中有3個片段選項卡。滾動刷新選項卡片段頁面
Fragment1包含一個ListFragment,而Fragment2也包含一個ListFragment。
單擊Fragment2中的項目後,它應該轉到Fragment1並刷新列表。 (該列表通過使用Gson的Web服務來填充)。因此Fragment2將一個值傳遞給Fragment1,以便它可以根據攜帶的參數重新加載。
我試過許多方法來刷新/片段1更新名單的國家,包括重新加載整個片段1 onCreateView
,使用FragmentTransaction
並調用自身內部主機Activity
。仍然無法找到實現它的方法。
另外我注意到,在滾動到標籤3並回到標籤1時,它刷新它。但它沒有刷新從表2到表1的列表。我在SO中讀取了一個解決方案,建議設置viewpager.setOffscreenPageLimit(0);
,問題依然存在。
這是我的代碼目前。
在主機活動(UserShopActivity
),我實現一個接口偵聽器Fragment2(UserCategoriesFragment
)獲得category_id
傳遞到片段1(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
錯誤:(
有人能指點我,我做錯了嗎?