30/09/2018, 18:56

[Android]-Xử lý sự kiện button trong custom listview

Xin lỗi, mình đang tự tìm hiểu về android, và mình gặp phải vấn đề này chưa thông, google qua tới nay vẫn chưa xử lý được nên mới lên đây phiền mọi người.
Mình có 1 custom listView gồm 2 textview và 1 button. Mình muốn khi nhấn vào thì nó sẽ thực hiện show 1 dialog (ví dụ như xác nhận có xóa dòng đó hay không ). nhưng khi mình để dialog vào sự kiện click button thì nó sẽ báo lỗi: Attempt to invoke virtual method ‘android.content.res.Resources$Theme android.content.Context.getTheme()’ on a null object reference
Mình thử viết sự kiện đó là thay đổi text thì nó chạy được bình thường.

đây là code của mình làm:

public class ListAdapterForLopHoc extends ArrayAdapter {
private Context context;
ArrayList arrCus=null;
public ListAdapterForLopHoc(Context context, int resource) {
super(context, resource);
}

public ListAdapterForLopHoc(Context context, int resource, List<CustomLop> objects) {
    super(context, resource, objects);
}
@Override
public View getView(final int position,View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.activity_custom_layout_for_lop_hoc, null);
    }
    CustomLop p = getItem(position);
    if (p != null) {
        TextView tvTen = (TextView) v.findViewById(R.id.tvCustomLayoutLopHocTen);
        tvTen.setText(p.Ten);
        final TextView tvMa = (TextView) v.findViewById(R.id.tvCustomLayoutLopHocMa);
        tvMa.setText(String.valueOf(p.Ma));
        final TextView t = (TextView) v.findViewById(R.id.textView23);
        ImageButton btXoa = (ImageButton) v.findViewById(R.id.btCustomLayoutLopHocXOa);
        btXoa.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                        AlertDialog.Builder builder1 = new AlertDialog.Builder(context);
                        builder1.setMessage("Write your message here.");
                        builder1.setCancelable(true);
                        builder1.setPositiveButton("Yes",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        builder1.setNegativeButton("No",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert11 = builder1.create();
                        alert11.show();
                    }
        });
    }
    return v;
}

}
Hy vọng được mấy anh chị giúp đỡ.

Võ Anh Kiệt viết 21:06 ngày 30/09/2018

Nguyên nhân xảy ra lỗi này :

  • Context của nó bị null => Crash

Làm sao fix :

  • Ngay chỗ
    AlertDialog.Builder builder1 = new AlertDialog.Builder(context);

Sửa lại là
AlertDialog.Builder builder1 = new AlertDialog.Builder(v.getContext());

Sau đó thử lại xem nhé !

Tuy nhiên, nếu Dialog này dùng đi dùng lại nhiều, bạn nên tạo ra bên ngoài với Context là của màn hình đó luôn chứ đừng dùng context của View con.

Tanj viết 20:58 ngày 30/09/2018

CẢm ơn @kingvhit nhiều. Vấn đề được giải quyết :))

Bài liên quan
0