我是android应用程序开发的初学者,我看到有两种方法来处理按钮点击。
第一个是使用 setOnClickListener
,第二个是使用 xml 属性 onClick
。
onClick
xml 属性对于初学者/我来说非常容易。
我可以通过创建按钮对象来更改按钮文本,然后: btn.setText("Button Clicked");
但我的问题是我可以使用 setText、isEnabled 等按钮方法而不创建其对象吗?
无需创建按钮对象或使用 XML 属性 onClick
即可更改按钮文本。
最佳答案
- 在您的
build.gradle
(模块:app)中添加以下内容:
android {
buildFeatures{
dataBinding = true
}
}
- 在您的字符串资源 (
res/values/strings.xml
) 中添加以下内容:
<resources>
<string name="button_clicked">Button Clicked</string>
</resources>
- 在
activity_main.java
中:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.example.myapplication.R"/>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{()->button.setText(R.string.button_clicked)}"/>
</FrameLayout>
</layout>
这将允许您在没有按钮实例的情况下更改按钮文本。但我认为这不是最佳方法,标准 setOnClickListener
是更好的方法。
另一种方法
- activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="buttonClicked"
type="java.lang.String"
/>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{()-> button.setText(buttonClicked)}"/>
</FrameLayout>
</layout>
- MainActivity.java:
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import android.os.Bundle;
import com.example.myapplication.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setButtonClicked("Button clicked");
}
}
关于java - 可以使用 xml 属性 onClick ="click"更改按钮文本,而无需创建按钮对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63842991/