如何实现点击不同Button将对应文本显示在同一个TextView中(每次仅显示一个)
实现点击按钮替换TextView内容的方案
嗨,这个需求超简单的!咱们只需要给每个按钮绑定点击事件,点击时直接把TextView的内容替换成当前按钮的文本就行,这样同一时刻TextView里只会显示一个按钮的内容,完美匹配你的要求~我给你分别准备了Java和Kotlin的实现代码,你按需取用就好!
第一步:编写布局文件(activity_main.xml)
先在XML里定义好三个按钮和一个TextView,给每个控件设置唯一ID方便后续引用:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮1的专属文本"/> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮2的独特内容"/> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮3的专属文字"/> <TextView android:id="@+id/displayTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:textSize="18sp"/> </LinearLayout>
第二步:Java版本代码实现(MainActivity.java)
在Activity中找到控件,给每个按钮设置点击监听器,点击时直接替换TextView的内容:
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView displayTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取TextView实例 displayTextView = findViewById(R.id.displayTextView); // 给Button1绑定点击事件 Button button1 = findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 替换TextView内容为Button1的文本 displayTextView.setText(button1.getText()); } }); // 给Button2绑定点击事件 Button button2 = findViewById(R.id.button2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { displayTextView.setText(button2.getText()); } }); // 给Button3绑定点击事件 Button button3 = findViewById(R.id.button3); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { displayTextView.setText(button3.getText()); } }); } }
第三步:Kotlin版本代码实现(MainActivity.kt)
Kotlin可以用lambda表达式简化代码,写起来更清爽:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.TextView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val displayTextView = findViewById<TextView>(R.id.displayTextView) // Button1点击事件 findViewById<Button>(R.id.button1).setOnClickListener { displayTextView.text = it.text } // Button2点击事件 findViewById<Button>(R.id.button2).setOnClickListener { displayTextView.text = it.text } // Button3点击事件 findViewById<Button>(R.id.button3).setOnClickListener { displayTextView.text = it.text } } }
小进阶:用View Binding优化代码
如果你的项目启用了View Binding,可以彻底告别findViewById,代码更安全还不容易出错,比如Kotlin版本的优化写法:
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.example.yourpackage.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.button1.setOnClickListener { binding.displayTextView.text = it.text } binding.button2.setOnClickListener { binding.displayTextView.text = it.text } binding.button3.setOnClickListener { binding.displayTextView.text = it.text } } }
这样不管点击哪个按钮,TextView都会立刻替换成对应按钮的文本,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Amit Sharma
相关产品推荐
相关产品推荐

