我有一个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
,因此不确定是否要创建一个类,以其他方式设置侦听器或如何访问它,我不确定会丢失什么。
答案 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);