[英]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.