将侦听器设置为自定义视图

时间:2019-05-21 08:49:41

标签: java android android-custom-view

我有一个view,可以动态添加由custom viewcheckboxedittext组成的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 个答案:

答案 0 :(得分:2)

尝试从膨胀视图调用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);