Android: используйте инструкцию SWITCH с помощью setOnClickListener/onClick для более чем 1 кнопки?
Скажем, у меня есть несколько кнопок в LinearLayout, 2 из которых:
mycards_button = ((Button)this.findViewById(R.id.Button_MyCards));
exit_button = ((Button)this.findViewById(R.id.Button_Exit));
Я зарегистрирую setOnClickListener()
на обоих из них:
mycards_button.setOnClickListener(this);
exit_button.setOnClickListener(this);
Как сделать SWITCH для разделения двух кнопок в Onclick?
public void onClick(View v) {
switch(?????){
case ???:
/** Start a new Activity MyCards.java */
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
break;
case ???:
/** AlerDialog when click on Exit */
MyAlertDialog();
break;
}
Ответы
Ответ 1
Использование:
public void onClick(View v) {
switch(v.getId()){
case R.id.Button_MyCards: /** Start a new Activity MyCards.java */
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
break;
case R.id.Button_Exit: /** AlerDialog when click on Exit */
MyAlertDialog();
break;
}
}
Обратите внимание, что это не будет работать в проектах библиотеки Android (из-за http://tools.android.com/tips/non-constant-fields), где вам нужно будет использовать что-то вроде:
int id = view.getId();
if (id == R.id.Button_MyCards) {
action1();
} else if (id == R.id.Button_Exit) {
action2();
}
Ответ 2
Другой вариант - добавить новый OnClickListener в качестве параметра в setOnClickListener() и переопределить метод onClick():
mycards_button = ((Button)this.findViewById(R.id.Button_MyCards));
exit_button = ((Button)this.findViewById(R.id.Button_Exit));
// Add onClickListener to mycards_button
mycards_button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
// Start new activity
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
}
});
// Add onClickListener to exit_button
exit_button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
// Display alertDialog
MyAlertDialog();
}
});
Ответ 3
public class MainActivity extends Activity
implements View.OnClickListener {
private Button btnForward, btnBackword, btnPause, btnPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControl();
}
private void initControl() {
btnForward = (Button) findViewById(R.id.btnForward);
btnBackword = (Button) findViewById(R.id.btnBackword);
btnPause = (Button) findViewById(R.id.btnPause);
btnPlay = (Button) findViewById(R.id.btnPlay);
btnForward.setOnClickListener(this);
btnBackword.setOnClickListener(this);
btnPause.setOnClickListener(this);
btnPlay.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnForward:
break;
case R.id.btnBackword:
break;
case R.id.btnPause:
break;
case R.id.btnPlay:
break;
}
}
}
Ответ 4
внутри метода OnCreate: -
{
Button b = (Button)findViewById(R.id.button1);
b.setOnClickListener((View.OnClickListener)this);
b = (Button)findViewById(R.id.button2);
b.setOnClickListener((View.OnClickListener)this);
}
@Override
public void OnClick(View v){
switch(v.getId()){
case R.id.button1:
//whatever
break;
case R.id.button2:
//whatever
break;
}
Ответ 5
И еще есть третий вариант. В методе onCreate() найдите все имеющиеся у вас кнопки и сохраните их как члены данных класса. Затем вы можете каскадировать группу операторов if-else, чтобы найти, что есть. Это немного грязно, но это необходимо, если вы не знаете идентификатор кнопок (что может быть сложным, если вы генерируете кнопки в Java-коде).
@Override
public void onClick(View v) {
if (v == m_myCards) {
Intent intent = new Intent(this, MyCards.class);
this.startActivity(intent);
}
else if (v == m_exit) {
MyAlertDialog();
}
else if (v == m_back) {
finish();
}
Еще одна приятная вещь в этой технике заключается в том, что она гибкая и быстрая (без необходимости синтаксического анализа идентификаторов). Плохо то, что вам нужно держать виджеты в памяти.
Не знаю, какой метод лучше.