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
功能。這是可能的,我在想錯誤的方式嗎?
你整理過了嗎? –
對不起,我看到了你的答案,然後忘了試一試。所以,它似乎工作,我可能不得不多嘗試一下。但無論如何,非常感謝你。 – MagicMicky