setOnClickListener问题 - 意外停止了应用程序

时间:2011-04-13 19:24:25

标签: android

我整天都在犯错误“申请已经意外停止了。请再试一次。”此问题是由方法“setOnClickListener”引起的。我正在按照以下方式使用此组件:

public class main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button nnumb1 = ((Button)this.findViewById(R.id.numb1)); 
        nnumb1.setOnClickListener((OnClickListener) this);

        Button nnumb2 = ((Button)this.findViewById(R.id.numb2)); 
        nnumb2.setOnClickListener((OnClickListener) this);

    }

    public void onClickHandler(View v){
        setTitle("???");
        String pressed = null;

        switch (v.getId()) {
            case R.id.nnumb1: 
                pressed="number one";
             break;
            case R.id.nnumb2:
                pressed="number two";
             break;
         }

        new AlertDialog.Builder(this).setTitle("Info").setMessage(pressed).setNeutralButton("Okey", null).show();       
        }
}

main.xml中按钮的ID称为“numb1”和“numb2”。 它看起来问题是前5行 - 但我不知道,如何解决它...我会很高兴任何提示......

谢谢!

2 个答案:

答案 0 :(得分:5)

问题似乎是这一行:

nnumb2.setOnClickListener((OnClickListener) this);

您将当前的Activity转换为OnClickListener,但是您没有实现正确的接口,因此这会在运行时给您一个异常。您必须在Activity中实现OnClickListener:

public class main extends Activity implements OnClickListener

然后你可以像这样使用它:

numb2.setOnClickListener(this);

答案 1 :(得分:1)

您可能只想为每个按钮设置onClickListener,这通常是我处理这些情况的方式。

Button nnumb1 = ((Button)this.findViewById(R.id.numb1));
nnumb1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                //stuff to do if button1 is clicked
            }
        });
Button nnumb2 = ((Button)this.findViewById(R.id.numb2));
nnumb2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                //stuff to do if button2 is clicked
            }
        });