java - .setOnClickListener 在空对象引用上(不能调用 ID?)
问题描述
在这个应用程序中,我动态地创建了一个带有 LinearLayout、TextView 和两个按钮的计数器对象,我想要类中的 onClickListener,因为这似乎是最好的解决方案。
我唯一能想到的是我在某种程度上弄错了 ID 创建。动态创建事物时的最佳实践是什么?
包括应用程序的屏幕截图和所有代码。
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) {
}
}
计数器类:https ://pastebin.com/YTHUbGFf
主类:https ://pastebin.com/p3p2PPEU
日志猫: https ://pastebin.com/0fYSKJyj
解决方案
您可以直接在 subButton 上设置 OnClickListener。我修改了您的 createSubButton() 方法:
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
}
});
}
}
推荐阅读
- java - 如何使用 curl 将 CSV 文件发布到 spring rest 端点
- c++ - C++ 中的模板化 is_in() 函数(检查数组是否包含字符串)
- html - JSON输出与Node JS一团糟
- python - 在字符串值的末尾添加零而不更改列类型
- ruby-on-rails - 每当用户隐含为应用程序名称时,Rails
- javascript - 通过单击父组件中的不同按钮打开模式
- javascript - 实现 https 和 socket io
- python - 从 Python 中的子进程运行 keepassxc-cli
- php - 无法破坏活动的 lambda 函数,嵌套输出缓冲区 wordpress scss 编译器
- html - 如何以角度更改按钮位置?