滚动时 ListView 自定义适配器错误

ListView Custom Adapter error on scrolling

我在下面附上了 listView 自定义适配器的代码,但是当我滚动列表时,我得到了:

mView does not exist, so discard the remaining points. java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference Can anybody help why I am getting this error it would be very helpfull

public class TransactionAdapter extends BaseAdapter {
    private static final String TAG = TransactionAdapter.class.getName();
    List<Transacation> arrlist;
    Context c;
    private LayoutInflater inflater;

    public TransactionAdapter(Context context, List<Transacation> list) {
        this.arrlist = list;
        this.c = context;
        inflater = LayoutInflater.from(this.c);
    }

        @Override
        public int getCount() {
            return arrlist.size();
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View result;
            final MyViewHolder myViewHolder;
            myViewHolder = new MyViewHolder();
            final Transacation transacation = arrlist.get(position);
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.transaction_adapter, parent,
                        false);

                myViewHolder.tv_date = convertView.findViewById(R.id.tv_date);
                myViewHolder.tv_status = convertView.findViewById(R.id.tv_status);
                myViewHolder.tv_expiry = convertView.findViewById(R.id.tv_expiry);
                myViewHolder.tv_amount = convertView.findViewById(R.id.tv_amount);

                result = convertView;
                convertView.setTag(myViewHolder);

            } else {
                result = convertView;
            }

            //        myViewHolder.tv_date.setText(""+new java.text.SimpleDateFormat("dd MMM").format(new java.util.Date (transacation.date)));
            if(transacation.transactionType.equals("CREDIT")){
                myViewHolder.tv_status.setText("Wallet Credited");
                myViewHolder.tv_expiry.setText("Expires on " + new java.text.SimpleDateFormat("dd MMM yyyy").format(new java.util.Date (transacation.expiry_date)));
                myViewHolder.tv_amount.setText("+₹" + transacation.n_amount);
                myViewHolder.tv_amount.setTextColor(Color.parseColor("#23DD47"));

            }
            else{
                myViewHolder.tv_status.setText("Wallet Expired");
                myViewHolder.tv_expiry.setVisibility(View.GONE);
                myViewHolder.tv_amount.setText("-₹" + transacation.n_amount);
                myViewHolder.tv_amount.setTextColor(Color.parseColor("#FB5151"));

            }

            return convertView;
        }

        private class MyViewHolder {
            TextView tv_date;
            TextView tv_status;
            TextView tv_expiry;
            TextView tv_amount;
        }
    }

在我看来,请检查 findViewById 是否具有正确的 ID 名称,或者如果与它无关,请从

更新
myViewHolder.tv_amount.setText("+₹" + transacation.n_amount);

myViewHolder.tv_amount.setText("+₹" + String.ValueOf(transacation.n_amount));

或者请post完整的日志值

当 convertView 不为 null 时,您需要通过取回标记来构造 ViewHolder,因此将您的 getView() 更改为:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View result;
    final MyViewHolder myViewHolder;
    final Transacation transacation = arrlist.get(position);
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.transaction_adapter, parent,
                false);
        myViewHolder = new MyViewHolder()
        myViewHolder.tv_date = convertView.findViewById(R.id.tv_date);
        myViewHolder.tv_status = convertView.findViewById(R.id.tv_status);
        myViewHolder.tv_expiry = convertView.findViewById(R.id.tv_expiry);
        myViewHolder.tv_amount = convertView.findViewById(R.id.tv_amount);

        result = convertView;
        convertView.setTag(myViewHolder);

    } else {
        result = convertView;
        myViewHolder = (MyViewHolder) convertView.getTag();
    }

    //        myViewHolder.tv_date.setText(""+new java.text.SimpleDateFormat("dd MMM").format(new java.util.Date (transacation.date)));
    if(transacation.transactionType.equals("CREDIT")){
        myViewHolder.tv_status.setText("Wallet Credited");
        myViewHolder.tv_expiry.setText("Expires on " + new java.text.SimpleDateFormat("dd MMM yyyy").format(new java.util.Date (transacation.expiry_date)));
        myViewHolder.tv_amount.setText("+₹" + transacation.n_amount);
        myViewHolder.tv_amount.setTextColor(Color.parseColor("#23DD47"));

    }
    else{
        myViewHolder.tv_status.setText("Wallet Expired");
        myViewHolder.tv_expiry.setVisibility(View.GONE);
        myViewHolder.tv_amount.setText("-₹" + transacation.n_amount);
        myViewHolder.tv_amount.setTextColor(Color.parseColor("#FB5151"));

    }

    return convertView;
}