Android один метод OnClick для нескольких кнопок?
Я начал программу немного в android,
У меня есть 3 кнопки в одном действии.
Я видел несколько примеров кодов, которые назначают одно и то же событие OnClick
всем кнопкам (даже если они выполняют совершенно другое действие), и в случае case case Switch(id)
case...
Какой лучший подход? один OnClick
метод и переключение или множество методов, по одному для каждой кнопки?
Спасибо.
Ответы
Ответ 1
Если вы хотите уменьшить строки кодирования, используйте View OnClick() with switch statement
, и если вы хотите обрабатывать отдельно все щелчки (для удобства понимания и поддержки кода), используйте отдельный button onClick().
Update:
Если вы указали кнопки в вашем XML файле макета Activity, то напишите атрибут android:onClick=""
с тем же именем метода для всех кнопок и реализуйте этот метод в своей деятельности. Теперь у вас есть один метод для всех кнопок и в этом методе различают кнопки с идентификатором.
Пример:
<?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
like,
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
.
Ответ 2
Используйте этот способ:
@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;
}
}
};
Ответ 3
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);
}
}
};
Вот хороший способ.
Ответ 4
Я думаю, что регистрация onClick
в xml (макет) - лучший подход.
EDIT:
Найдено связанных тем:
Ответ 5
Зарегистрировано событие onClick в XML-макете, а затем обрабатывает его в коде. Вот как я это сделаю:
<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;
}
}
Ответ 6
Маленькое дополнение к ответу @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;
}
}
};
Это может быть полезно, если вы не хотите инициализировать переменную кнопки, но хотите отслеживать событие нажатия кнопки. Спасибо!