繁体   English   中英

Android 按钮 onclick 方法无效

[英]Android button onclick method isn't working

我有以下代码
Xml :

<TextView
        android:id="@+id/mainTextView"
        android:textSize="30sp"
        android:text="@string/hello_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

<Button 
        android:id="@+id/submitButton"
        android:textColor="@color/colorPrimary"
        android:text="Click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:onClick="submit()"/>

Java:

public void submit(View view){
        setContentView(R.layout.main);
        TextView tv1 = (TextView)findViewById(R.id.mainTextView);
        tv1.setText("Clicked");
    }

每次我点击按钮时,我的应用程序都会崩溃。 现在怎么修?

你一定得到编译时错误

onClick handler method name cannot contain the character '('android:onClick="submit()"行中onClick handler method name cannot contain the character '('

您可能会在按钮单击回调中将 UI 作为setContentView(R.layout.main)不可见。

public void submit(View view){
        setContentView(R.layout.main);
        TextView tv1 = (TextView)findViewById(R.id.mainTextView);
        tv1.setText("Clicked");
    }

您必须在适当的 Activity 生命周期方法即OnCreateView()设置它。像这样:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

快乐编码

onClick属性无法解析包含特殊字符的值。 您已经使用了 '(' 和 ')'。 这是有效的java。 它不能用于 XML 属性。

在 xml attritube 中只写明确的名称,例如,

...
android:onClick="submit"
...

然后在MainActivity.java创建一个方法。 您可以在 XML 属性"submit"的方法名称上按 ALT+ENTER,这将为您创建方法。

如果这不起作用,请确认您的按钮已初始化。 应用程序崩溃也是由于未初始化的组件而发生的。

或者您可以在 java 文件中使用setOnClickListener方法。

...
Button btn; // This variable can be global or local as per your need

btn = findViewById(R.id.submitButton);

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("Button","CLicked..");
            }
        });

...

首先,将您的setContentView移动到onCreate

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

其次,在类中编写您的提交方法:

public void submit(View view) {
        TextView tv1 = (TextView)findViewById(R.id.mainTextView);
        tv1.setText("Clicked");
    }

在你的代码中,

<Button 
        android:id="@+id/submitButton"
        android:textColor="@color/colorPrimary"
        android:text="Click"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:onClick="submit()"/>

你可以在submit()下看到一条红线,如果你把鼠标放在上面,你可以看到描述:

onClick handler method name cannot contain the character '('

删除它们后,可能会再次看到一条警告消息

Use databinding or explicit wiring of click listener in code

您有 3 个选项,第一个是tools:ignore="UsingOnClickInXml"或在您的活动中使用setOnClickListener ,最后一个是data binding

<data>
    <variable
      name="listener"
      type="android.view.View.OnClickListener" />
</data>

暂无
暂无

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

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