setOnClickListener的NullPointerException问题

时间:2016-05-29 15:17:47

标签: android

我查看了很多类似的问题,并试图实施给出的解决方案。似乎没有删除' NullPointerException'这打破了我试图建立的应用程序。我总是使用这种方法按钮没有任何问题,我不知道如何解决这个问题。

下面是我的简单java类,其中' setOnClickListener'方法触发警告。

    values = [400, 500, 600]
    i = 700

    candidates = []
    for value in values:
        candidates.append(abs(i-value))

    closest_index = candidates.index(min(candidates))
    print(values[closest_index])

我检查了xml属性的ID,一切似乎都很准确。欢迎任何帮助。

public class pennState extends AppCompatActivity  {
    Button buttonNext;
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.penn_state_1);

    buttonNext = (Button) findViewById(R.id.buttonNext);
    buttonNext.setOnClickListener(myHandler1);

}
View.OnClickListener myHandler1 = new View.OnClickListener() {
    public void onClick(View v) {
        Intent i = new Intent(pennState.this, pennState2.class);
        startActivity(i);
    }
};
}

提前致谢! :)

3 个答案:

答案 0 :(得分:3)

你在声明它之前调用该变量。并将myHandler1放入onCreate()。

您还可以将此属性添加到xml标记

android:onClick="myMethod"

然后声明这个方法

public void myMethod(View view){}

并在大括号中单击按钮时放置您想要执行的操作。

答案 1 :(得分:0)

将上面的变量声明与按钮一起放在onCreate中进行初始化:

public class pennState extends AppCompatActivity  {
Button buttonNext;
View.OnClickListener myHandler1;
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.penn_state_1);

    myHandler1 = new View.OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent(pennState.this, pennState2.class);
            startActivity(i);
    }
};

    buttonNext = (Button) findViewById(R.id.buttonNext);
    buttonNext.setOnClickListener(myHandler1);
}

答案 2 :(得分:0)

您只需将new OnClickListener传递给按钮的setOnClickListener,而不是将其声明为局部变量。你可以这样做:

 @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.penn_state_1);

        buttonNext = (Button) findViewById(R.id.buttonNext);
        buttonNext.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            Intent i = new Intent(pennState.this, pennState2.class);
            startActivity(i);
          }
        });
    }