nerozale 2020-04-30 17:01 采纳率: 50%
浏览 345
已结题

【Android studio】 【onClick NullPointerException】 java.lang.NullPointerException: Attempt to invoke interface method ··········.Adapter.goods_Adapter.onClick(goods_Adapter.java:44)

【Android studio】 【onClick NullPointerException】
报错:java.lang.NullPointerException: Attempt to invoke interface method ··········.Adapter.goods_Adapter.onClick(goods_Adapter.java:44)
空指针,在listview里的item设置了按钮监听事件
代码:

package com.example.nero.thecashregistersystem.Adapter;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.TextView;

import com.example.nero.thecashregistersystem.R;
import com.example.nero.thecashregistersystem.bean.goodsInfo;

import java.util.List;

public class goods_Adapter extends ArrayAdapter<goodsInfo> implements View.OnClickListener {

    private int mResource;
    List<goodsInfo> goodsinfo ;
    private Context mContext;
    private LayoutInflater mInflater;
//    private MyClickListener mListener;//所有listview的item共用同一个


    private BtnOnclick btnOnclick;
    public BtnOnclick getBtnOnclick() {
        return btnOnclick;
    }

    public void setBtnOnclick(BtnOnclick bottomBtnOnclick) {
        this.btnOnclick = btnOnclick;
    }

    public interface BtnOnclick{
        public void click(View view,int index);
    }

    @Override
    public void onClick(View view) {
        btnOnclick.click(view,(int)view.getTag());//**这行代码报错**
    }





//原:
    public goods_Adapter(Context context, int resource, List<goodsInfo> objects) {
        super(context, resource, objects);
//        mResource = R.layout.item;
        mResource = resource;

    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        goodsInfo goodsinfo = getItem(position);
        View view;
        ViewHolder viewHolder;
        if (convertView == null){
            view = LayoutInflater.from(getContext()).inflate(mResource,null);
            viewHolder = new ViewHolder();
            viewHolder.name = (TextView) view.findViewById(R.id.listview_name);
            viewHolder.goods_number = (TextView) view.findViewById(R.id.listview_goodsnumber);
            viewHolder.in_price = (TextView) view.findViewById(R.id.listview_inprice);
            viewHolder.out_price = (TextView) view.findViewById(R.id.listview_outprice);
            viewHolder.update_time = (TextView) view.findViewById(R.id.listview_updatetime);
             viewHolder.btn_add_jiesuan = (ImageButton) view.findViewById(R.id.btn_add_jiesuan);
            view.setTag(viewHolder);
        }
        else{
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.name.setText(goodsinfo.getName());
        viewHolder.goods_number.setText(goodsinfo.getgoods_number());
        viewHolder.in_price.setText(goodsinfo.getin_price()+"");
        viewHolder.out_price.setText(goodsinfo.getout_price()+"");
        viewHolder.update_time.setText(goodsinfo.getupdate_time());
        //设置按钮监听
        viewHolder.btn_add_jiesuan.setOnClickListener(this);
        viewHolder.btn_add_jiesuan.setTag(position);

        return view;
    }



    class ViewHolder{
        TextView name;
        TextView goods_number;
        TextView in_price;
        TextView out_price;
        TextView update_time;
        ImageButton btn_add_jiesuan;
//        int position;
    }
}

在fragment里的相关代码是

``` private void InitListview(final List goodsArray){
adapter = new goods_Adapter(getActivity(),R.layout.item,goodsArray);
lv.setAdapter(adapter);
adapter.setBtnOnclick(new goods_Adapter.BtnOnclick() {
@Override
public void click(View view, int index) {
switch (view.getId()){
case R.id.btn_add_jiesuan:
Toast.makeText(
getActivity(), "listview的内部的按钮被点击了!,位置是:" + (Integer) view.getTag() + ",内容是-->" + goodsArray.get((Integer) view.getTag()).name,
Toast.LENGTH_SHORT).show();

                    break;
            }
        }
    });

}
而且报错那行还debug不了,不知道为什么,其他地方就可以debug。
view = LayoutInflater.from(getContext()).inflate(mResource,null);确定是item的id,debug看过了


希望大佬告诉我请问问题出在哪里??谢谢!!!
  • 写回答

3条回答 默认 最新

  • threenewbee 2020-04-30 18:03
    关注
    public void setBtnOnclick(BtnOnclick bottomBtnOnclick) {
        this.btnOnclick = btnOnclick;
    }
    
    public interface BtnOnclick{
        public void click(View view,int index);
    }
    

    这里返回的是空的接口

    评论

报告相同问题?

悬赏问题

  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。