英文:
Is possible to change Button text using xml attribute onClick="click" and without creating a Button Object
问题
我是Android应用开发的初学者,我看到有两种处理按钮点击的方法。
第一种是使用setOnClickListener
,第二种是使用xml属性onClick
。
对于初学者/我来说,onClick
xml属性非常简单。
我可以通过创建一个按钮对象然后使用以下方式更改按钮文本:btn.setText("按钮点击");
但是我的问题是,我是否可以在不创建按钮对象的情况下使用setText
、isEnabled
等方法来操作按钮。
是否可能在不创建按钮对象或不使用xml属性onClick
的情况下更改按钮文本。
英文:
I am a beginner in android app development, I have seen there are two methods to handle on button click.
First one is using setOnClickListener
and second is using xml attribute onClick
.
onClick
xml attribute quite easy for beginner/me.
I can change button text by creating an object of a button and then: btn.setText("Button Clicked");
But my question is can I use setText, isEnabled, etc.. methods for button without creating its object.
Is possible to change button text without creating a Button Object or using the XML attribute onClick
.
答案1
得分: 2
- 在您的
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");
}
}
英文:
- To Your
build.gradle
(Module: app) add this:
android {
buildFeatures{
dataBinding = true
}
}
- To Your String resources (
res/values/strings.xml
) add this:
<resources>
<string name="button_clicked">Button Clicked</string>
</resources>
- And in
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>
This will allow You to change button text without having a button instance. But I think this is not an optimal method and the standard setOnClickListener
is a way better.
<hr>
Another method
- 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");
}
}
答案2
得分: 1
这可以通过在onClick处理程序中进行操作来实现。
或者
可以使用数据绑定来完成:只需将您的片段实例添加为变量,然后您就可以将任何方法与onClick链接。
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.testapp.fragments.CustomFragment">
<data>
<variable android:name="fragment" android:type="com.example.testapp.fragments.CustomFragment"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_place_black_24dp"
android:onClick="@{() -> fragment.buttonClicked()}"/>
</LinearLayout>
</layout>
英文:
This can be achieved by doing manipulation in onClick handlers.
or
It can be done with data bindings: Just add your fragment instance as a variable, then you can link any method with onClick.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.testapp.fragments.CustomFragment">
<data>
<variable android:name="fragment" android:type="com.example.testapp.fragments.CustomFragment"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_place_black_24dp"
android:onClick="@{() -> fragment.buttonClicked()}"/>
</LinearLayout>
</layout>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论