往ListView中放入十个按钮和解决Attempt to invoke virtual method.’...Button‘.on a null object reference.

本文分享了在安卓开发中,如何使用ListView和ListAdapter将十个按钮成功展示的过程。作者通过解决空指针异常等问题,实现了按钮的正确显示,并理解了convertView参数在ListView中的作用。

往ListView中放入十个按钮

刚刚接触安卓不久,这是老师留给我们的作业,作为小白花了两天才实现,在这个社区别人的博客里获得了不少的帮助,也想在这里记录一下我的小小成果和改错历程,希望也能给别的初学者一点帮助,如果我的思考出现了错误和偏差,我更加希望能被大家指出来。
最开始我想套用课本上的“ListView的简单用法”来实现,但是尝试了许久都无法实现。在寻找资料的过程中,本站Lshare的一篇博客详细讲解了ListView及ListAdapter,给了我很大帮助,最后成品的框架便是从那里来的。贴上网址以供参考ListView及ListAdapter详解—Lshare
程序完成前有一个折磨了我很久的空指针异常:Attempt to invoke virtual method.’…Button‘.on a null object reference. 最后在本站TNove的一篇博客受到启发。也贴上网址Android开发中出现Attempt to invoke virtual method…on a null object reference----TNove

其中部分代码如下:


 listView.setAdapter(new ArrayAdapter<String>
 (MainActivity.this,R.layout.button_item,buttonNames)
        {
            @Override
            public View getView(final int position, @Nullable View convertView
            , @NonNull ViewGroup parent) {
                View view=null;
                if(convertView!=null){		
                    view=convertView;		//重用加载好的布局
                }else {
                    view= LayoutInflater.from(getContext()).inflate
                    (R.layout.button_item,null);
                }

                Button button = view.findViewById(R.id.button_layout);
               button.setText(buttonNames.get(position));

刚开始我的button一直没有办法获取到实例,总是出现空指针错误。明明我又关联好了,最后感觉可能是if语句判断出了第一种结果,导致button的布局没有被传入。于是我将if… else语句注释掉,只留下else语句里面的内容,终于实现了老师的要求。
我在课本里发现了被我注释掉的convertView参数的作用:

getView()方法中有一个convertView参数,用于将之前加载好的布局进行缓存,以便之后可以进行重用。

我估计是由于我在这个button未加进去时就加载开程序查看过,所以conver根据判断我的view依然是之前未存在button的view,所以当时button无法实例化,也就无法进行setText()等操作。(不知道我的表述有没有问题。。。)
于是我将注释掉的if…else语句重新显示出来,程序依然能正常运行(由于converView中已经缓存了刚刚成功打开的真正需要的布局,所以能够正确显示了)。

最后希望自己继续加油,不要被困难打败!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值