简体   繁体   English

意想不到的行为-onClick错误

[英]Unexpected Intent behavior - error onClick

I have two buttons, yes and no. 我有两个按钮,是和否。 When I click the yes button, it works fine and loads the next activity. 当我单击“是”按钮时,它可以正常工作并加载下一个活动。 However, when I press no it errors. 但是,当我按no时会出错。 I have switched the XML onclick on the no button to the yes method and it works fine so it can't me the XML, can it? 我将no按钮上的XML onclick切换为yes方法,它可以正常工作,所以不能使用XML,可以吗?

Inside my FlowIntent.java: 在我的FlowIntent.java中:

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

Inside my MainActivity.java: 在我的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);
    }
}

Inside my MainActivity2.java AND MainActivity3 (which works for 2): 在我的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
    }
}

Inside my XML: 在我的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" />

My error log is: 我的错误日志是:

E/AndroidRuntime: FATAL EXCEPTION: main Process: capri.capritestapplication, PID: 2384 java.lang.IllegalStateException: Could not find method loadQuestionNo(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button' at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) at android.view.View.performClick(View.java:5610) at android.view.View$PerformClick.run(View.java:22260) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.andro E / AndroidRuntime:致命例外:主进程:capri.capritestapplication,PID:2384 java.lang.IllegalStateException:在视图类android.support上定义的android:onClick属性的父级或祖先上下文中找不到方法loadQuestionNo(View)。 android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)上的ID为'button'的v7.widget.AppCompatButton,位于android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java: 284),位于android.view.View.performClick(View.java:5610),位于android.os.Handler.handleCallback(Handler.java:751),位于android.view.View $ PerformClick.run(View.java:22260) android.app.ActivityThread.main(ActivityThread.java:6077)上的android.os.Looper.loop(Looper.java:154)上的android.os.Handler.dispatchMessage(Handler.java:95)在java.lang.reflect .com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)处的.Method.invoke(本机方法) id.internal.os.ZygoteInit.main(ZygoteInit.java:755) id.internal.os.ZygoteInit.main(ZygoteInit.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" />

Look at your XML code.Both button has same id android:id="@+id/button" . 查看您的XML代码。两个按钮都具有相同的id android:id="@+id/button" Your Button id must be unique for every view 您的Button ID在每个视图中必须唯一

As your updated question i suggest you to change the name of the method which you call from XML. 作为更新的问题,我建议您更改从XML调用的方法的名称。 change your method name in xml as well as in your activities. 在xml和活动中更改您的方法名称。

It would be better if you show complete code with xml that would help us to suggest you edits. 如果显示带有xml的完整代码会更好,这将有助于我们建议您进行编辑。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM