将OnClickListener设置为按钮编程错误



我正在为一个项目制作一个简单的GPA计算器,我们首先使用xml进行计算,现在我的教授希望它是动态的。我有4个文本视图,4个编辑文本和1个按钮。一切都运行良好,但当我尝试设置OnClickListener()时,程序会崩溃。如何使按钮以编程方式工作。以下是我正在尝试的。

     android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    // button
    Button button1 = new Button(this);
    final int button1id = View.generateViewId();
    button1.setId(button1id); // id
    button1.setText("Send Data");
    button1.setLayoutParams(params);
    layout.addView(button1);
    button1 = (Button) findViewById(button1id);
    OnClickListener clicks = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(v.getId() == button1id){
                Intent i = new Intent(getApplicationContext(), SecondActivity.class);
                startActivity(i);
            }
        }
    };

然后当我调用这个时,它会给我一个错误。

button1.setOnClickListener(clicks);

提前谢谢。

不要执行findViewById。简单调用:

button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            
                Intent i = new Intent(getApplicationContext(), SecondActivity.class);
                startActivity(i);
        }
    }); 

这将解决你的问题。

不再需要按id调用按钮,也无需更改视图。将ClickListener改为OnClickListener

    android.widget.LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    // button
    Button button1 = new Button(this);
    final int button1id = View.generateViewId();
    button1.setId(button1id); // id
    button1.setText("Send Data");
    button1.setLayoutParams(params);
    layout.addView(button1);
    button1.setOnClickListener(clicks)
    OnClickListener clicks = new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(v.getId() == button1id){
                Intent i = new Intent(getApplicationContext(), SecondActivity.class);
                startActivity(i);
            }
        }
    };

相关内容

最新更新