[英]Is there any way to make an Activity react differently for each button when clicked?
假設您有一個按鈕 A 和按鈕 B,當您單擊它時,它們都會啟動 Activity1,其中僅包含一個 TextView。 現在,當我單擊按鈕 A 時,它應該啟動 Activity1 並將 setTextView 設置為“點擊來自 A”,當點擊 B 時,它應該將文本設置為“點擊來自 B”。
所以我發現通過制作一個全局 Boolean 變量,但我想知道有沒有其他方法比制作一個全局 Boolean 變量更有效(代碼變得非常混亂布爾)
而這一切只是現實中的一個例子,我想添加很多代碼而不是僅僅設置文本。
如果你們中的任何一個人要離開投票,請也請說出原因,這將有助於我下次提出更好的問題。 謝謝
TL;博士
使用啟動Activity2
的Intent
object 傳遞 arguments 。 使用putExtra
方法。 這是傳遞小塊數據的默認方式。
解釋
在這種情況下,“制作一個全局 Boolean 變量”是一個糟糕的解決方案(不是個人的,它只是不適合給定的問題),因為任何人都可以訪問該變量,並且該值可以隨時更改,使其不可靠。
當您使用Intent啟動活動時,您可以在其上使用putExtra
方法( 文檔中此類方法的示例)。 例如,有一個putExtra
接受boolean
作為值: link 。 使用該方法您可以刪除全局變量,但代碼仍然可能很混亂。
如果這個 boolean 變量只是決定要顯示哪個 label,您可以使用這些putExtra
方法傳遞 label 本身。 它看起來像這樣:
// From Activity1 when you click Button A
buttonA.setOnClickListener {
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra(Activity2.SOME_KEY, "This label is from buttonA.");
startActivity(intent);
}
// From Activity1 when you click Button B
buttonB.setOnClickListener {
Intent intent = new Intent(Activity1.this, Activity2.class);
intent.putExtra(Activity2.SOME_KEY, "This label is from buttonB. A slightly different one.");
startActivity(intent);
}
Activity2.SOME_KEY
是一些公共 static 變量,您應該聲明它以確保使用相同的鍵來設置和取回值。 你可以用不同的名字來命名它。 它必須是字符串類型。 無需在Activity2
class 中聲明它,但因為它是僅通過Activity2
的 arguments 的關鍵,我認為這是最合適的地方。
現在您可以在Activity2
中取回該值:
class Activity2 extends Activity {
public static String SOME_KEY = "some string value";
private String labelValue = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
labelValue = getIntent().getStringExtra(SOME_KEY);
// ... other stuff here like setContentView
// use `labelValue` to set text into some TextView.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.