我在android中開始一點點編程, 我在單個活動中有3個按鈕。Android的一個OnClick方法適用於多個按鈕?
我看到分配相同OnClick
事件所有的按鈕(即使他們的表現完全不同的動作)一些示例代碼和方法Switch(id)
案件審理的案件......
有什麼更好的辦法?一個onClick
方法和切換或許多方法,每個按鈕一個?
謝謝。
我在android中開始一點點編程, 我在單個活動中有3個按鈕。Android的一個OnClick方法適用於多個按鈕?
我看到分配相同OnClick
事件所有的按鈕(即使他們的表現完全不同的動作)一些示例代碼和方法Switch(id)
案件審理的案件......
有什麼更好的辦法?一個onClick
方法和切換或許多方法,每個按鈕一個?
謝謝。
如果你想降低編碼線,然後使用View's OnClick() with switch statement
,如果要單獨處理所有的點擊(爲便於理解和維護的代碼),然後使用單獨的所有button's onClick().
更新:
如果您已在活動佈局xml文件中聲明Button,而不是使用相同方法名稱爲所有按鈕編寫屬性android:onClick=""
,並在您的活動中實施該方法。現在你有一個方法來處理所有的按鈕,並且在這個方法中用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" >
<Button android:id="@+id/button1"
android:layout_width="wrap_content"
android:onClick="buttonOnClick"
android:layout_height="wrap_content"
android:text="Hello, I am a Button 1" />
<Button android:id="@+id/button2"
android:layout_width="wrap_content"
android:onClick="buttonOnClick"
android:layout_height="wrap_content"
android:text="Hello, I am a Button 2" />
<Button android:id="@+id/button3"
android:layout_width="wrap_content"
android:onClick="buttonOnClick"
android:layout_height="wrap_content"
android:text="Hello, I am a Button 3" />
</LinearLayout>
現在,在您的活動實施buttonOnClick
一樣,
public void buttonOnClick(View view)
{
switch(view.getId())
{
case R.id.button1:
// Code for button 1 click
break;
case R.id.button2:
// Code for button 2 click
break;
case R.id.button3:
// Code for button 3 click
break;
}
}
或者你可以在你的活動適用同一交換機的情況下動態添加按鈕, 一樣,而不是buttonOnClick
您必須使用實現了View的OnClickListerner的的onClick
。
this.btnAddFriedtoFacebook = (Button) this.findViewById(R.id.btnAddFriedtoFacebook);
this.btnAddFriedtoFacebook.setOnClickListener(this.backButtonClickListener);
public OnClickListener backButtonClickListener = new OnClickListener()
{
public void onClick(final View view)
{
if (view == MatchInfoActivity.this.btnBack)
{
MatchInfoActivity.this.finish();
}
if(view == MatchInfoActivity.this.btnAddFried){
Intent i = new Intent(Intent.ACTION_VIEW);
MatchInfoActivity.this.startActivity(i);
}
if(view == MatchInfoActivity.this.btnAddBuddy){
Intent i = new Intent(Intent.ACTION_VIEW);
MatchInfoActivity.this.startActivity(i);
}
}
};
這是好方法。
我覺得在xml(佈局)中註冊onClick
是更好的方法。
編輯:
找到相關主題:
我認爲把它放在XML中有點奇怪,因爲它是唯一以這種方式工作的UI行爲。也許,如果它更像iOS,那麼您從UI設計器設置所有UI處理程序,這將更有意義。 – goto10
用這樣的方式:
@Override
public void onCreate(Bundle savedInstanceState) {
button1.setOnClickListener(onClickListener);
button2.setOnClickListener(onClickListener);
button3.setOnClickListener(onClickListener);
}
private OnClickListener onClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.button1:
//DO something
break;
case R.id.button2:
//DO something
break;
case R.id.button3:
//DO something
break;
}
}
};
在XML佈局中註冊onClick事件,然後在代碼中處理它。這是我會怎麼做:
<Button
android:id="@+id/btplus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me"
android:onClick="onBtnClicked">
的方法。class
public void onBtnClicked(View v) {
switch (v.getId()) {
case R.id.btplus:
Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show();
break;
case R.id.btminu:
Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
@Nguyen的答案很少。
findViewById(R.id.buttonOne).setOnClickListener(buttonClickListener);
.... .... .... ....
findViewById(R.id.buttonN).setOnClickListener(buttonClickListener);
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonOne:
// do something
break;
.... .... .... ....
case R.id.buttonN:
// do something
break;
}
}
};
如果您不想初始化按鈕變量,但想要追蹤按鈕單擊事件,這可能很有用。謝謝!
他並不是在問如何處理點擊,而是他已經意識到的兩種技術中的哪一種是首選。 – goto10