Подтвердить что ты не робот

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;
}
4b9b3361

Ответ 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();            
    }

Еще одна приятная вещь в этой технике заключается в том, что она гибкая и быстрая (без необходимости синтаксического анализа идентификаторов). Плохо то, что вам нужно держать виджеты в памяти.

Не знаю, какой метод лучше.