意外的意图行为 - 错误onClick

时间:2016-10-26 11:40:02

标签: java android android-intent

我有两个按钮,是和否。当我单击是按钮时,它工作正常并加载下一个活动。但是,当我按下它没有错误。我已经将no按钮上的XML onclick切换为yes方法,它工作正常,因此不能使用XML,是吗?

在我的FlowIntent.java中:

class FlowIntent {
    public Intent Yes;
    public Intent No;
}

在我的MainActivity.java中:

package capri.capritestapplication;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
    private FlowIntent Flow = new FlowIntent();
    @Override    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // should be dynamic
        this.Flow.No = new Intent(this, MainActivity2.class);
        this.Flow.Yes = new Intent(this, MainActivity2.class);
    }
    public void loadQuestionNo(View view) {
        startActivity(this.Flow.No);
    }
    public void loadYes(View view) {
        startActivity(this.Flow.Yes);
    }
}

在我的MainActivity2.java和MainActivity3(适用于2)中:

package capri.capritestapplication;
import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
    private FlowIntent Flow = new FlowIntent();
    @Override    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = getIntent();
    }
    public void loadQuestionNo(View view) {
        // todo
    }
    public void loadYes(View view) {
        // todo
    }
}

在我的XML中:

<Button
        android:text="No"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="34dp"
        android:layout_marginStart="34dp"
        android:id="@+id/button2"
        android:elevation="3dp"
        android:onClick="loadYes" />

<Button
        android:text="No"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="34dp"
        android:layout_marginStart="34dp"
        android:id="@+id/button"
        android:elevation="3dp"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_toRightOf="@+id/button2"
        android:layout_toEndOf="@+id/button2"
        android:onClick="loadQuestionNo" />

我的错误日志是:

  

E / AndroidRuntime:致命异常:主要                     过程:capri.capritestapplication,PID:2384                     java.lang.IllegalStateException:无法在父级或祖先语句中找到方法loadQuestionNo(View)用于android:onClick属性在视图类android.support.v7.widget.AppCompatButton上定义的id为'button'                         在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)                         在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)                         在android.view.View.performClick(View.java:5610)                         在android.view.View $ PerformClick.run(View.java:22260)                         在android.os.Handler.handleCallback(Handler.java:751)                         在android.os.Handler.dispatchMessage(Handler.java:95)                         在android.os.Looper.loop(Looper.java:154)                         在android.app.ActivityThread.main(ActivityThread.java:6077)                         at java.lang.reflect.Method.invoke(Native Method)                         在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)                         在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

2 个答案:

答案 0 :(得分:2)

    <Button
        android:text="No"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="34dp"
        android:layout_marginStart="34dp"
        android:id="@+id/button"
        android:elevation="3dp"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_toRightOf="@+id/button2"
        android:layout_toEndOf="@+id/button2"
        android:onClick="loadYes" />

<Button
        android:text="No"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="34dp"
        android:layout_marginStart="34dp"
        android:id="@+id/button"
        android:elevation="3dp"
        android:layout_alignBaseline="@+id/button2"
        android:layout_alignBottom="@+id/button2"
        android:layout_toRightOf="@+id/button2"
        android:layout_toEndOf="@+id/button2"
        android:onClick="loadQuestionNo" />

查看您的XML代码。两个按钮具有相同的ID android:id="@+id/button"。您的Button ID对于每个视图都必须是唯一的

作为您的更新问题,我建议您更改从XML调用的方法的名称。在xml和活动中更改方法名称。

如果您使用xml显示完整代码,这将有助于我们建议您进行编辑,那会更好。

答案 1 :(得分:0)

相反,在XML布局中使用android:onClick可以通过findViewById()查看每个按钮,并设置每个按钮的onClickListner,并从代码而不是XML本身执行此操作。