意外的Intent行为-单击时出错



我有两个按钮,yes和no。当我单击yes按钮时,它工作正常,并加载下一个活动。然而,当我按下"否"时,它会出错。我已经将"否"按钮上的XML onclick切换为"是"方法,它运行良好,所以它不能显示XML,是吗?

在我的FlowIntent.java中:

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

Inside my 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:致命异常:main进程:capri.capritestapplication,PID:2384java.lang.IollegalStateException:在android的父或祖先上下文中找不到方法loadQuestionNo(View(:在视图类android.support.v7.widget.AppCompatButton上定义的onClick属性,id为"button"在android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewExplater.java:327(在android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewExplater.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(ActivityThreads.java:6077(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:755(

    <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"。对于每个视图,您的按钮id必须是唯一的

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

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

不要在XML布局中使用android:onClick,而是通过findViewById()获取视图,并设置每个按钮的onClickListner,然后从代码而不是XML本身执行。

最新更新