Как изменить текст и функцию кнопки в Android?

Я новичок в Android. Вот что я пытаюсь сделать. У меня есть интерфейс для работы с тремя кнопками. Второе действие идентично, но текст и действия кнопок разные. Вместо того, чтобы переключать намерения или действия, когда кнопки нажимаются на первое действие, можно ли вводить код для изменения при нажатии? Таким образом, мне не понадобится второй идентичный пользовательский интерфейс.

Три кнопки: Login, SignUp и Tour. При нажатии кнопки «Логин» или «Тур» я действительно хочу, чтобы они запускали разные действия. Но для «SignUp» это означает, что пользовательский интерфейс будет идентичным, содержащим одни и те же кнопки, но с другим текстом и запускает разные намерения. Моя цель – устранить этот идентичный интерфейс и просто изменить кнопки на первом экране при нажатии «Зарегистрироваться».

Вот мой текущий код, который просто запускает новые намерения при щелчке. Я не уверен, с чего начать получать нужные функции. Любая помощь приветствуется. Благодарю.

import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.content.Intent import android.support.v4.content.ContextCompat.startActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun login(view: View) { val myIntent = Intent(this@MainActivity, LoginActivity::class.java) this@MainActivity.startActivity(myIntent) } fun signUpAs(view: View) { val myIntent = Intent(this@MainActivity, SignUpAsActivity::class.java) this@MainActivity.startActivity(myIntent) } fun tour(view: View) { val myIntent = Intent(this@MainActivity, TourActivity::class.java) this@MainActivity.startActivity(myIntent) } override fun onWindowFocusChanged(hasFocus: Boolean) { super.onWindowFocusChanged(hasFocus) if (hasFocus) { val decorView = window.decorView decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) } } } 

Я предлагаю вам сохранить свой код для входа в систему и зарегистрироваться в разных действиях или фрагментах (так оно и есть сейчас). Если вы хотите устранить дублирование UI, рассмотрите возможность создания отдельного макета (простой подход) или пользовательского представления (более продвинутый подход) с тремя кнопками.

Вот пример.

разреш / макет / layout_buttons_menu.xml

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button1" /> <Button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button2" /> <Button android:id="@+id/button3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Button3" /> </LinearLayout> 

разреш / макет / activity_login.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="textPersonName" android:text="Name" /> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="textPassword" /> <include layout="@layout/layout_buttons_menu" /> </LinearLayout> 

include , позволит вам повторно использовать компоненты пользовательского интерфейса. Официальная документация здесь .

В своей деятельности вы можете получить доступ к этим кнопкам обычным способом

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login) val button1 = findViewById(R.id.button1) as Button } 

В SignUpAsActivity задайте макет для R.layout.activity_main.

setContentView (R.layout.activity_main)

Установите требуемую кнопку и динамически установите текст или любой другой требуемый атрибут.

 Button mButton=(Button)findViewById(R.id.mybutton); mButton.setText("MyButton"); 

Совет. Вы можете использовать синтетические свойства, чтобы избавиться от findviewbyid: https://kotlinlang.org/docs/tutorials/android-plugin.html