0

私はViewPager FragmentActivity3つのタブを保持するを持っています、タブのそれぞれは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);        
    }
...


}
4

1 に答える 1

3

それで、もう少し掘り下げた後、私はここで「樹皮」から解決策を見つけました:ViewPagerの一部としてListFragmentのデータを更新します

アクティビティの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-09-04T11:53:09.553 に答える