簡體   English   中英

有什么方法可以讓 Activity 在單擊時對每個按鈕做出不同的反應?

[英]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;博士

使用啟動Activity2Intent 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM