自定义adapter时getView方法返回null出现的异常

java.lang.NullPointerException: Fragment Attempt to invoke virtual method ‘int android.view.View.getImportantForAccessibility()’ on a null object reference
今天要在Fragment中展示一个列表数据,由于只是测试,所以在fragment的onCreateView回调方法中就直接模拟出数据,并使用listView展示。没想到遇到这个问题,没报出具体那一行的错误,也没指向是哪一个类抛出的异常,刚开始以为是activity载入fragment时,onCreateView返回的View为空了,但debug之后发现不是。然后又看了fragment中载入的其它控件,看见是不是有为空的,发现也不是。最后就只剩下adapter没有看了,就点进去看,这下傻眼了,果然就是adapter中出现的问题。
原因是我在重写getView方法时,直接返回值为null了。然而在抛出异常时,并没有直接定位到这一行代码,晕了!

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        TextView tvDistance;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_view, parent, false);
            tvDistance = (TextView) convertView.findViewById(R.id.tv_distance);
            convertView.setTag(tvDistance);
        } else {
            tvDistance = (TextView) convertView.getTag();
        }
        ...

        return null;//这里不能直接返回null
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArrayAdapterAndroid常用的适配器之一,用于将一个数组或List的数据展示到界面上。如果想要自定义ArrayAdapter,可以按照以下步骤进行: 1. 创建一个类继承自ArrayAdapter,例如: ``` public class MyAdapter extends ArrayAdapter<String> { private Context mContext; private int mResource; private List<String> mDatas; public MyAdapter(Context context, int resource, List<String> datas) { super(context, resource, datas); mContext = context; mResource = resource; mDatas = datas; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 自定义getView方法 return super.getView(position, convertView, parent); } } ``` 2. 在自定义的MyAdapter重写getView方法,该方法用于设置ListView或GridView每一项的布局和数据。可以根据自己的需求进行布局和数据的设置。 例如: ``` @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if (convertView == null) { view = LayoutInflater.from(mContext).inflate(mResource, parent, false); holder = new ViewHolder(); holder.textView = (TextView) view.findViewById(R.id.text_view); view.setTag(holder); } else { view = convertView; holder = (ViewHolder) view.getTag(); } String data = mDatas.get(position); holder.textView.setText(data); return view; } static class ViewHolder { TextView textView; } ``` 3. 在布局文件设置ListView或GridView的适配器为自定义的MyAdapter。 例如: ``` ListView listView = findViewById(R.id.list_view); List<String> datas = new ArrayList<>(); datas.add("data1"); datas.add("data2"); MyAdapter adapter = new MyAdapter(this, R.layout.item_layout, datas); listView.setAdapter(adapter); ``` 以上就是自定义ArrayAdapter的基本步骤,可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值