做一個小項目的時候遇到了一個空指針問題, 項目的大概是這樣FragmentA中是一些普通佈局,FragmentB中是一個listview顯示數據,當我從FragmentA中點擊 到FragmentB的時,FragmentB中listview還沒有把數據加載出來時再次切換到FragmentA就會發現閃退異常空指針
然後我看了一下原因發現FragmentB裏的listview適配器中的Context爲空
public Context con;
public LayoutInflater inflater;
public ArrayList<Map<String, Object>> list;
public find_adapter(Context con,ArrayList<Map<String, Object>> list){
this.con=con;
this.list=list;
Log.i("TAG", "con"+con);
this.inflater=LayoutInflater.from(con);
}
適配器中的context爲空那就表示FragmentA中傳過來的getactivity()爲空
FragmentA中調用適配器代碼:
find_adapter bMybaseadapter=new find_adapter(getActivity(),list);
find_lv.setAdapter(bMybaseadapter);
bMybaseadapter.notifyDataSetChanged();
第一行代碼中getactivity()爲空我去網上查看了一下getactivity爲空的原因發現大部分都說getactivity()爲空是被Fragment回收了,我就試了一下解決方法發現運行還是報錯,後來才查找到原因,原來FragmentA還沒有加載到getactivity。
解決辦法:
1、在FragmentA中創建Context
public Context context;
2、在FragmentA中重寫onCreate方法
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
context=getActivity();
}
將getactivity值傳給context3、在FragmentA中調用listview適配器
在調用適配器的時候原來使用getactivity,現在更換爲創建的context
find_adapter bMybaseadapter=new find_adapter(context,list);
find_lv.setAdapter(bMybaseadapter);
bMybaseadapter.notifyDataSetChanged();
然後重新跑一下,發現怎麼切換都不會報空了、