getActivity,Context为空解决办法

原文地址:https://blog.csdn.net/qq_26650589/article/details/72473274

做一个小项目的时候遇到了一个空指针问题, 项目的大概是这样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();  

然后重新跑一下,发现怎么切换都不会报空了、

猜你喜欢

转载自blog.csdn.net/qq_17798399/article/details/82722444