Java .setOnClickListener在空对象引用上(是否可以调用ID?)
在这个应用程序中,我动态地创建了一个计数器对象,它有一个LinearLayout、TextView和两个按钮,我希望onClickListener在类中,因为这似乎是最好的解决方案 我能想到的唯一一件事是,我不知何故弄错了ID的创建。动态创建内容时的最佳实践是什么 包括应用程序的屏幕截图和所有代码Java .setOnClickListener在空对象引用上(是否可以调用ID?),java,android,oop,nullpointerexception,Java,Android,Oop,Nullpointerexception,在这个应用程序中,我动态地创建了一个计数器对象,它有一个LinearLayout、TextView和两个按钮,我希望onClickListener在类中,因为这似乎是最好的解决方案 我能想到的唯一一件事是,我不知何故弄错了ID的创建。动态创建内容时的最佳实践是什么 包括应用程序的屏幕截图和所有代码 public class Counter implements View.OnClickListener { private final int subButtonId = View.gen
public class Counter implements View.OnClickListener {
private final int subButtonId = View.generateViewId();
...
private void createSubButton() {
subButton = new Button(context);
subButton.setLayoutParams(new LinearLayout.LayoutParams(buttonWidth, LinearLayout.LayoutParams.MATCH_PARENT, 0.5f));
subButton.setText("-");
subButton.setTextSize(buttonTextSize);
subButton.setId(subButtonId);
subButton.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL);
container.addView(subButton);
sub = mainContainer.findViewById(subButtonId);
sub.setOnClickListener(new MyOnClickListener() {
@Override
public void onClick(View v) {
subCount();
disp.setText(count.toString());
}
});
}
}
class MyOnClickListener implements View.OnClickListener {
public MyOnClickListener() {
}
@Override
public void onClick(View v) {
}
}
柜台类别:
主要类别:
日志:
应用程序图像:
subButton.setOnClickListener(…)代码>
container
和maincainer
之间有任何关系。您将视图添加到容器
,但正在从主容器
您可以直接在子按钮上设置ClickListener。我修改了createSubButton()方法:
}share error logcat here directley..
sub
可能为空,share complete error Log您将视图添加到container
,然后尝试在mainContainer
中查找。我建议您创建一个XML布局并动态膨胀,或者最好尝试实现recyclerview,因为您正在处理计数器数组。trymainContainer.findViewById(R.id.subButtonId)代码>
private void createSubButton() {
subButton = new Button(context);
subButton.setLayoutParams(new LinearLayout.LayoutParams(buttonWidth, LinearLayout.LayoutParams.MATCH_PARENT, 0.5f));
subButton.setText("-");
subButton.setTextSize(buttonTextSize);
subButton.setId(subButtonId);
subButton.setGravity(Gravity.CENTER | Gravity.CENTER_HORIZONTAL);
container.addView(subButton);
subButton.setOnClickListener(new MyOnClickListener() {
@Override
public void onClick(View v) {
//do something
}
});
}