2014-09-28 63 views
0

我正在學習爲android創建應用程序。我想編輯按下的按鈕的文本。設置按鈕的文字。 Android開發

我現在的工作,但我想知道是否有更好的方法。特別是對於行

Button vb = (Button) v; 
vb.setText(et1.getText().toString()); 

什麼是正在傳入的視圖「v」?爲什麼我不能做類似v.setText()的事情;

package mobile.threethingstodo; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity implements View.OnClickListener { 

Button b1, b2, b3; 
EditText et1; 
String text = "default"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    initialize(); 
} 

public void initialize() { 
    b1 = (Button) findViewById(R.id.button1); 
    b2 = (Button) findViewById(R.id.button2); 
    b3 = (Button) findViewById(R.id.button3); 
    et1 = (EditText) findViewById(R.id.editText1); 

    b1.setOnClickListener(this); 
    b2.setOnClickListener(this); 
    b3.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 

    Button vb = (Button) v; 
    vb.setText(et1.getText().toString()); 

} 

回答

1

什麼是在傳遞視圖 「V」?

View傳遞給onClick()是被點擊了View。這是編寫此程序的好方法,因爲所執行的操作對於所有按鈕都是相似的。

爲什麼我不能做類似v.setText();

因爲View類沒有setText() metohd。如果你嘗試這樣做,你會得到一個編譯器錯誤。

+0

傳遞給'onClick()'的'View'是一個按鈕,對不對?一個按鈕是一個視圖... – rgkirch 2014-09-29 22:43:02

+0

@rgkirch是的,在這種情況下,傳遞給'onClick()'的'View'是每個你用來註冊'OnClickListener'的按鈕。但是,您可以使用**任何**'View'註冊一個'OnClickListener',即使那些不是按鈕。你不能認爲傳入的'View'將始終是一個按鈕。 – 2014-09-30 00:35:52

+0

我可以驗證它是一個Button,如果它然後調用'setText()'? – rgkirch 2014-09-30 22:42:39

0

您可以在視圖擴展爲View時將View轉換爲TextView。那麼當你想要處理多個點擊事件時,你會被引入另一個問題。面對這個問題時,請了解每個視圖的具體情況,然後使用該ID來標識您的目標視圖。

+0

就個人而言,當每個按鈕需要不同的邏輯時,我更喜歡設置不同的事件處理程序。 – 2014-09-28 22:12:39

+0

這是一個喜好的問題,在這裏沒有絕對的對或錯:)無論你的船漂浮;-) – RobGThai 2014-09-28 22:17:16

+0

正是!我只是在這裏指出我的偏好作爲替代。 – 2014-09-28 22:29:34