2014-02-06 80 views
1

我在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錯誤:(

有人能指點我,我做錯了嗎?

回答

0

t ry this:

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