getActivity,Context爲空解決辦法

做一個小項目的時候遇到了一個空指針問題, 項目的大概是這樣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值傳給context

3、在FragmentA中調用listview適配器

在調用適配器的時候原來使用getactivity,現在更換爲創建的context

 

find_adapter bMybaseadapter=new find_adapter(context,list);
				find_lv.setAdapter(bMybaseadapter);
				bMybaseadapter.notifyDataSetChanged();  

然後重新跑一下,發現怎麼切換都不會報空了、





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章