在開發者控制檯錯誤報告中,有時我會看到具有NPE問題的報告。我不明白我的代碼有什麼問題。在模擬器和我的設備應用程序沒有強制關閉的情況下工作良好,但是有些用戶在調用getActivity()方法時會在fragment類中得到NullPointerException。Android。片段getActivity()有時會返回空值
活動
pulic class MyActivity extends FragmentActivity{
private ViewPager pager;
private TitlePageIndicator indicator;
private TabsAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
pager = (ViewPager) findViewById(R.id.pager);
indicator = (TitlePageIndicator) findViewById(R.id.indicator);
adapter = new TabsAdapter(getSupportFragmentManager(), false);
adapter.addFragment(new FirstFragment());
adapter.addFragment(new SecondFragment());
indicator.notifyDataSetChanged();
adapter.notifyDataSetChanged();
// push first task
FirstTask firstTask = new FirstTask(MyActivity.this);
// set first fragment as listener
firstTask.setTaskListener((TaskListener) adapter.getItem(0));
firstTask.execute();
}
indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Fragment currentFragment = adapter.getItem(position);
((Taskable) currentFragment).executeTask();
}
@Override
public void onPageScrolled(int i, float v, int i1) {}
@Override
public void onPageScrollStateChanged(int i) {}
});
}
的AsyncTask類
public class FirstTask extends AsyncTask{
private TaskListener taskListener;
...
@Override
protected void onPostExecute(T result) {
...
taskListener.onTaskComplete(result);
}
}
片段類
public class FirstFragment extends Fragment immplements Taskable, TaskListener{
public FirstFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.first_view, container, false);
}
@Override
public void executeTask() {
FirstTask firstTask = new FirstTask(MyActivity.this);
firstTask.setTaskListener(this);
firstTask.execute();
}
@Override
public void onTaskComplete(T result) {
// NPE is here
Resources res = getActivity().getResources();
...
}
}
也許當應用程序從後臺恢復這個錯誤發生。在這種情況下,我應該如何正確處理這種情況?
我想出了一個問題,但沒有解決方案。我不知道爲什麼,但片段恢復早期活動。這隻會發生在我的應用程序在最近的應用程序列表中的最後位置時,它似乎會破壞我的應用程序。 – 2012-07-24 15:40:54
當我從後臺fragmetn繼續我的應用程序onCreate一個onResume調用之前activity onCreate/onResume方法。它似乎有些分離的片段仍然活着,並試圖恢復。此字符串中的 – 2012-07-25 09:05:38
firstTask.setTaskListener((TaskListener)adapter.getItem(0)); adapter.getItem(0)返回舊的片段,適配器不會刪除片段correctrly – 2012-07-25 15:19:51