在这个应用程序中,我正在使用LinearLayout,TextView和两个Button动态创建一个计数器对象,我希望在类内部使用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
答案 0 :(得分:0)
subButton.setOnClickListener(...);
container
和mainContainer
之间的任何关系。您已将视图添加到container
,但正在从mainContainer
观看答案 1 :(得分:0)
您可以直接在subButton上设置onOnClickListener。我修改了您的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
}
});
}
}