Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java .setOnClickListener在空对象引用上(是否可以调用ID?)_Java_Android_Oop_Nullpointerexception - Fatal编程技术网

Java .setOnClickListener在空对象引用上(是否可以调用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

在这个应用程序中,我动态地创建了一个计数器对象,它有一个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) {

    }
}
柜台类别:

主要类别:

日志:

应用程序图像:

  • 您不需要再次找到视图。您可以调用
    subButton.setOnClickListener(…)
  • 我看不到
    container
    maincainer
    之间有任何关系。您将视图添加到
    容器
    ,但正在从
    主容器

  • 您可以直接在子按钮上设置ClickListener。我修改了createSubButton()方法:


    }

    share error logcat here directley..
    sub
    可能为空,share complete error Log您将视图添加到
    container
    ,然后尝试在
    mainContainer
    中查找。我建议您创建一个XML布局并动态膨胀,或者最好尝试实现recyclerview,因为您正在处理计数器数组。try
    mainContainer.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
            }
        });
    }