【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看过了
希望大佬告诉我请问问题出在哪里??谢谢!!!