2013-05-19 30 views
0

我目前正在嘗試使用片段,但是我遇到了一個我無法解決的問題。FragmentAdapter不支持片段的好引用

我有一個活動,其中包含4個不同的片段。通過這個活動,我啓動了一個ASyncTask,它可以訪問Web並獲取我需要的不同數據,然後將它發送到碎片。但是,當我的應用程序被殺害並再次打開時,或者當我改變方向時,我的碎片顯然被重新創建,我的自定義FragmentAdapter不能保存對碎片的良好引用。

這是我主要活動的代碼。

public class MainActivity extends FragmentActivity { 
    MyPagerAdapter fgsAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //... 
     FragmentManager fm = super.getSupportFragmentManager(); 
     fgsAdapter = new MyPagerAdapter(fm,this); 
     ViewPager myPager = (ViewPager) findViewById(R.id.home_pannels_pager); 
     myPager.setAdapter(fgsAdapter); 
     myPager.setCurrentItem(0); 
    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     ATaskGetUser task = new ATaskGetUser(callback, (ProgressBar) findViewById(R.id.PB_AsyncTask)); 
     task.execute(); 
    } 
    //What's called by the ASyncTask onPostExecute() 
    private void notifyDataChanged() { 
     fgsAdapter.notifyFragments(user.getItems()); 
    } 

    private class MyPagerAdapter extends FragmentPagerAdapter { 
     private List<CardFragment> fragments = new ArrayList<CardFragment>(); 
     private Context c; 

     public MyPagerAdapter(FragmentManager fm, Context c) { 
      super(fm); 
      CardFragment h = new HabitFragment(); 
      CardFragment d = new DailyFragment(); 
      CardFragment t = new ToDoFragment(); 
      CardFragment r = new RewardFragment(); 
      fragments.add(h); 
      fragments.add(d); 
      fragments.add(t); 
      fragments.add(r); 
     } 
     public int getCount() { 
      return fragments.size(); 
     } 

     @Override 
     public CardFragment getItem(int position) { 
      Log.v("MainActivity_fgsmanager", "getItem()"); 
      CardFragment f = (CardFragment) this.fragments.get(position); 
      return f; 
     } 
     public void notifyFragments(List<HabitItem> items) { 
      for(OnTasksChanged f : fragments) { 
       f.onChange(items); 
      } 
     } 
    } 
} 

所以,我希望能夠做的,是能夠調用的onChange(我的四個片段實現的接口),在我notifyDataChanged功能。這是可能的,我在想錯誤的方式嗎?

回答

0

我在使用Fragments時遇到了同樣的問題,每次屏幕旋轉後我都丟失了當前片段。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.rate_fragment, container,false); 

    setRetainInstance(true);//Added not to lose the fragment instance during screen rotations 

(...) 

對於您的情況下您的應用程序就會被殺死,並再次打開,我不知道它會:

我只需在片段類中添加一個線(未在父FragmentActivity類)解決了它儘管工作。

+0

你整理過了嗎? –

+0

對不起,我看到了你的答案,然後忘了試一試。所以,它似乎工作,我可能不得不多嘗試一下。但無論如何,非常感謝你。 – MagicMicky

相關問題