Настройка слушателя для пользовательского просмотра - PullRequest
1 голос
/ 21 мая 2019

У меня есть view, который динамически добавляет custom view, сделанный с checkbox, edittext и imagebutton.Я хочу добавить слушателей к imagebutton, чтобы удалить custom view (или установить видимость на gone, если нажата imagebutton. Это мой код, начиная с более простых вещей:

 public void addView() {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View view = inflater.inflate(R.layout.item_task_list, null);
        ImageButton img_btn = findViewById(R.id.delete);
        EditText name_et = findViewById(R.id.todo);
        CheckBox done_cb = findViewById(R.id.done);
        img_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 // Do something
            }
        });
        parentLayout.addView(view, parentLayout.getChildCount() - 1);

Это работает, пока у меня нет слушателя. С ним я получаю эту ошибку: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

Это работает, если я устанавливаю слушателя следующим образом: img_btn.setOnClickListener(this); изатем используйте метод OnClick из упражнения. Там у меня есть:

case R.id.delete:
        v.getParent().
        break;

Но тогда я не могу ни установить видимость на gone, ни удалить ее.

Это мойПри первом добавлении custom views, поэтому я не уверен, что мне не хватает, если мне нужно создать класс, настроить слушателя другим способом или как получить к нему доступ.

1 Ответ

2 голосов
/ 21 мая 2019

попробуйте позвонить findViewById с завышенной точки зрения. Это должно помочь.

public void addView() {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View view = inflater.inflate(R.layout.item_task_list, null);
        ImageButton img_btn = view.findViewById(R.id.delete);
        EditText name_et = view.findViewById(R.id.todo);
        CheckBox done_cb = view.findViewById(R.id.done);
        img_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 // Do something
            }
        });
        parentLayout.addView(view, parentLayout.getChildCount() - 1);

...