【问题标题】:How to restart Loader in a ListFragment from a FragmentActivity tha uses ViewPager?如何从使用 ViewPager 的 FragmentActivity 重新启动 ListFragment 中的 Loader?
【发布时间】:2012-09-03 14:15:59
【问题描述】:

我有一个 ViewPager FragmentActivity 包含 3 个选项卡,每个选项卡都是一个带有加载器的 ListFragment。 在这个活动的初始化中,所有的加载器都加载了,到目前为止一切都很好。

我在重启加载器的片段中实现了一个公共方法refresh()getLoaderManager().restartLoader(0, null, this);

当我从父活动中调用它时,它会抛出 illegalStateException Fragment not attached to Activity。 任何想法如何重新启动加载程序?

编辑:

我的活动扩展了SherlockFragmentActicity,其中我有一个扩展FragmentPagerAdapter 的适配器来管理寻呼机中的选项卡。

public class UserPageFragmentActivity extends SherlockFragmentActivity{
   ...

    mTabsAdapter.addTab(mTabHost.newTabSpec(TAB_CHANNELS).setIndicator("Following"),
            UserPageListFragmentChannels.class, null);
   ...

     public void refresh(){

           switch (mTabHost.getCurrentTab()){
                     case CHANNELS:
                              ((UserPageListFragmentChannels)mTabsAdapter.getItem(CHANNELS)).refresh();
                              break;
        ...
           }

     }

}

现在标签片段是:

public class UserPageListFragmentChannels extends SherlockListFragment implements
LoaderManager.LoaderCallbacks<Void> {

...
    public void refresh(){
        getLoaderManager().restartLoader(0, null, this);        
    }
...


}

【问题讨论】:

  • 如果您使用支持库,请致电getSupportLoaderManager() 而不是getLoaderManager()
  • 我尝试扩展 ListFragment 或 SherlockListFragment,它们都采用 getLoaderManager() 而不是 getSupportLoaderManager()。我现在得到的错误是非法状态异常片段未附加到活动...
  • 更新了我得到的异常。已编辑帖子。
  • 这很奇怪。 getSupportLoaderManager() 应该是它所需要的,因为它默认使用支持库,这意味着您不应该使用 getLoaderManager()。我说发布你的一些代码。

标签: android android-viewpager android-loadermanager android-loader


【解决方案1】:

所以在挖掘了更多之后,我从“barkside”找到了解决方案:Update data in ListFragment as part of ViewPager

我在我的活动的 refresh() 中实现了相同的功能:

UserPageListFragmentChannels fragment =  
              (UserPageListFragmentChannels) getSupportFragmentManager().findFragmentByTag("android:switcher:"+R.id.pager+":0"); 
          if(fragment != null)  // could be null if not instantiated yet 
          { 
             if(fragment.getView() != null)  
             { 
                // no need to call if fragment's onDestroyView()  
                //has since been called. 
                fragment.refresh(); // do what updates are required 
             } 
          } 

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多