getActivity,Context为空解决办法

做一个小项目的时候遇到了一个空指针问题, 项目的大概是这样FragmentA中是一些普通布局,FragmentB中是一个listview显示数据,当我从FragmentA中点击 到FragmentB的时,FragmentB中listview还没有把数据加载出来时再次切换到FragmentA就会发现闪退异常空指针

然后我看了一下原因发现FragmentB里的listview适配器中的Context为空

[java]  view plain  copy
  1. public Context con;  
  2. public LayoutInflater inflater;  
  3. public ArrayList<Map<String, Object>> list;  
  4. public find_adapter(Context con,ArrayList<Map<String, Object>> list){  
  5.     this.con=con;  
  6.     this.list=list;  
  7.     Log.i("TAG""con"+con);  
  8.     this.inflater=LayoutInflater.from(con);  
  9.   
  10.   
  11. }  

适配器中的context为空那就表示FragmentA中传过来的getactivity()为空

FragmentA中调用适配器代码:

[java]  view plain  copy
  1. find_adapter bMybaseadapter=new find_adapter(getActivity(),list);  
  2. find_lv.setAdapter(bMybaseadapter);  
  3. bMybaseadapter.notifyDataSetChanged();    
第一行代码中getactivity()为空

我去网上查看了一下getactivity为空的原因发现大部分都说getactivity()为空是被Fragment回收了,我就试了一下解决方法发现运行还是报错,后来才查找到原因,原来FragmentA还没有加载到getactivity。

解决办法:

1、在FragmentA中创建Context

[java]  view plain  copy
  1. public Context context;  

2、在FragmentA中重写onCreate方法

[java]  view plain  copy
  1. @Override  
  2.     public void onCreate(Bundle savedInstanceState) {  
  3.         // TODO Auto-generated method stub  
  4.         super.onCreate(savedInstanceState);  
  5.         context=getActivity();  
  6.     }  
将getactivity值传给context

3、在FragmentA中调用listview适配器

在调用适配器的时候原来使用getactivity,现在更换为创建的context

 

[java]  view plain  copy
  1. find_adapter bMybaseadapter=new find_adapter(context,list);  
  2.                 find_lv.setAdapter(bMybaseadapter);  
  3.                 bMybaseadapter.notifyDataSetChanged();    

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值