2016-06-13 4 views
1

Вот моя ситуация: Я программно даю несколько кнопок onClickListener, однако я не могу полностью обработать это событие, потому что я хотел бы определить, какая кнопка была нажата, чтобы дать этой кнопке (при нажатии) новое значение. Вот как запрограммировать эти кнопки:Определите, какая кнопка была нажата

final View.OnClickListener soundButtonListener = new View.OnClickListener() { 
      public void onClick(View v) { 
       playSound(1); 

       int x = songPlay * songProgress; 

       mplayer.seekTo(x); 
      } 
     }; 

     tableLayout = (TableLayout)v 
       .findViewById(R.id.tableLayout); 

     int number = 1; 
     for (int i = 0; i < tableLayout.getChildCount(); i++) { 
      TableRow row = (TableRow)tableLayout.getChildAt(i); 
      for (int j = 0; j < row.getChildCount(); j++) { 
       Button button = (Button) row.getChildAt(j); 
       button.setText("" + number); 

       button.setOnClickListener(soundButtonListener); 
       songProgress = j; 
       number++; 
      } 
     } 

Как вы видите, они не щелчок слушателем для каждого из них, так что, когда я нажимаю мою кнопку, MPlayer всегда seekto точки, becausae songProgress останавливается на 64 (у меня есть 64 кнопки для обработки). Хорошо, что у меня есть число для каждой кнопки (как вы видите button.setText («+ число»;)), и я хотел бы проверить, что их номер, чтобы дать songProgress разные значения.

+0

пожалуйста, вы можете разработать более. мне это не очень понятно –

+0

Я думаю, это то, что вы ищете. [Проверить этот ответ] (http://stackoverflow.com/questions/3412180/how-to-determine-which-button-pressed-on-android) – Suhas

ответ

1

Если я правильно понимаю, что вы можете сделать что-то вроде этого:

final View.OnClickListener soundButtonOnClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if(v instanceof Button) { 
      Button button = (Button) v; 
      String text = button.getText().toString(); 

      if(text == "1") { 
       //... 
      } else if(text == "2") { 

      } 
      //OR 
      switch (text) { 
       case "1": { 
        break; 
       } 
       case "2": { 
        break; 
       } 
       //... 
      } 
     } 
    } 
}; 

Но на мой взгляд, более эффективное использование тег вместо текста:

//set tag for your button 
button.setTag(number); 

//use this tag 
Integer number = (Integer) v.getTag(); 
if(number != null) { 
    //... 
} 
+0

Он не работает полностью, потому что он получает значение 0 из кнопка –

+0

@BitleApps Что значит? –

+0

Я решил эту проблему, но мой «x» не увеличивает (Songplay не 0) –

0

Ваш onClick имеет объект View v, который должен представлять собой представление, вызвавшее событие. Таким образом, это представление должно быть вашей кнопкой. Теперь вы можете получить текст этой кнопки с v.getText(). Затем проанализируйте текст на свой номер и используйте его.

0

Если и хотите знать, текст кнопки нажатой, используйте this:

public void onClick(View v) { 
    Button b = (Button)v; 
    String buttonText = b.getText().toString(); 

    //Do your thing with buttonText 
} 
0

Очень просто обнаружить вашу кнопку. Просто вы можете сделать, как

button.setId(2000 + 0); 

для справки вы можете проверить его -

for (int i = 0; i < ch.length; i++) { 
    Button button = new Button(this); 
    button.setTextColor(context.getResources().getColor(R.color.black)); 
    button.setPadding(5, 5, 5, 5); 
    if (Integer.parseInt(String.valueOf(ch[i])) == 0) { 
      button.setText("No"); 
      button.setId(2000 + 0); 
      layout.addView(button, layoutParams); 
      button.setOnClickListener(this); 
     } 
     if (Integer.parseInt(String.valueOf(ch[i])) == 1) { 
      button.setText("Less"); 
      button.setId(2000 + 1); 
      layout.addView(button, layoutParams); 
      button.setOnClickListener(this); 
     } 
     if (Integer.parseInt(String.valueOf(ch[i])) == 2) { 
      button.setText("Half"); 
      button.setId(2000 + 2); 
      layout.addView(button, layoutParams); 
      button.setOnClickListener(this); 
     } 
} 

и в OnClick

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case 2000: 
      Log.e(TAG,"button 0 clicked"); 
      break; 
     case 2001: 
      Log.e(TAG,"button 1 clicked"); 
      break; 
     case 2002: 
      Log.e(TAG,"button 2 clicked"); 
      break; 
     case 2003: 
      Log.e(TAG,"button 3 clicked"); 
      break; 
    } 
} 
Смежные вопросы