【问题标题】:Crashing on startActivity when clicking button单击按钮时在 startActivity 上崩溃
【发布时间】:2021-03-13 02:55:04
【问题描述】:

有同样的问题。该按钮在正确的时间初始化,但由于某种原因,它在单击时崩溃。 xml 文件显示 onClick 处理程序缺少相关活动。

xml

<Button
    android:id="@+id/start_reg_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="216dp"
    android:onClick="onClick"
    android:text="@string/need_a_new_account" />

Java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_start);

    mRegBtn = (Button) findViewById(R.id.start_reg_btn);

    mRegBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent reg_intent = new Intent(StartActivity.this, RegisterActivity.class);
            startActivity(reg_intent);
        }
    });
}

对 android 编程非常陌生。任何帮助表示赞赏

【问题讨论】:

  • 确保 R.layout.activity.start xml 有这个按钮。
  • 我发布的 xml 代码来自 acitvity_start.xml 文件
  • 可能是因为 android:onClick="onClick" 并且你没有在你的activity中创建这个方法,所以删除这行后再试试。

标签: java android android-button


【解决方案1】:

有两种方法可以解决您的问题:

  1. 当您在 XML 中声明 onClick 处理程序时,您需要在 Activity 中实现该方法。

在您的情况下,您已使用以下行为 XML 上的按钮声明了 onClick 处理程序:

 android:onClick="onClick"

因此,您现在必须在您的活动中创建一个方法名称 onClick() 并在那里执行您的代码,如下所示:

public void onClick(View v) {
  Intent reg_intent = new Intent( StartActivity.this, RegisterActivity.class);
  startActivity(reg_intent);
}
  1. 从您的 XML 中删除这一行:
 android:onClick="onClick"

然后做你已经做过的事情:

mRegBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent reg_intent = new Intent( StartActivity.this, RegisterActivity.class);
                startActivity(reg_intent);
            }
        });

所以,主要概念是你不能同时使用android:onClicksetOnClickListener。您必须一次使用一个。

【讨论】:

  • 我从 xml 文件的按钮中删除了 android:onClick="onClick" 属性,但单击时它仍然崩溃
【解决方案2】:
android:onClick and `setOnClickListener` can not used simultaneous.

要正确使用android:onClick,可以参考the official link

【讨论】:

    【解决方案3】:

    尝试使用getContext() 获取当前上下文并实现为。

    public void onClick(View v) {
        Intent reg_intent = new Intent(v.getContext(), RegisterActivity.class);
        v.getContext().startActivity(reg_intent);
    }
    

    要么从 xml 文件中定义 onClick,要么使用 View.setOnClickListener 以编程方式定义它。两者不能共存。

    【讨论】:

    • 删除了 android:onClick="onClick" 以便它们不会共存,但它仍然会在点击时崩溃。我在运行之前进行了重建,但单击该按钮仍然会崩溃
    【解决方案4】:

    发现 TextEditinput != TextInputLayout 的错误,这就是它崩溃的原因。它也可以通过 onClick 方法或 SetuponClickListener 工作,所以感谢大家和他们的帮助

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2011-10-20
      • 2015-09-18
      相关资源
      最近更新 更多