2013-07-19 3 views
4

Я установил 10 кнопок в xml и добавил к основному виду деятельности. Я показываю только 2. Все кнопки просто меняют цвета переменной и кнопки. Есть ли способ сгруппировать все кнопки в один onclicklistener и использовать переключатель, чтобы проверить, какая кнопка была нажата. использование отдельного onclicklistener похоже на выделение талии.Button array onclicklistener

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    f1 =(Button) findViewById(R.id.f1); 
    f2 =(Button) findViewById(R.id.f2); 

    f1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      clearbutton(); 
      f1.setBackgroundColor(Color.RED); 
      intbtnSelect=0; 
     } 
    }); 

    f2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      clearbutton(); 
      f2.setBackgroundColor(Color.RED); 
      intbtnSelect=1; 
     } 
    }); 

ответ

6

Вы можете реализовать OnClickListener в свой Activity. Например

public class MyActivity extends Activity implements View.OnClickListener {  
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     f1 =(Button) findViewById(R.id.f1); 
     f1.setOnClickListener(this); 

     f2 =(Button) findViewById(R.id.f2); 
     f2.setOnClickListener(this); 
    } 
} 

Их нужно реализовать метод OnClick и переключатель, на view.getId():

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.f1: 
     // your code here 
     break; 
    case R.id.f2: 
     // your code here 
     break; 
    } 
} 
0

в вашем XML, на всех кнопках:

android:onclick="myClick" 

в ваша деятельность:

public void onClick (View v){ 
    Button clickedButton = (Button) v; 
    //Do wathever you want with your Button 
    clickedButton.setBackgroundColor(Color.RED); 
    // and you could also switch(v.getId()) if really needed. 
} 

Вы co uld также реализует View.OnClickListener, как это предлагает blackbelt, это просто зависит от ваших предпочтений.

Я лично люблю поддерживать более чистый код java, но это зависит от вас!

Нет ничего хорошего/неправильного использования этих двух методов, я думаю.

0

Позвольте вашей деятельности реализовать View.OnClickListener, а затем вы должны добавить метод onClick(View view).

При создании кнопки, вы просто добавить эту строку

button.setOnClickListener(this), так что всякий раз, когда кнопка нажата, она будет вызывать метод onClick() в вашей деятельности.

Внутри метода onClick() вы можете использовать view.getId(), чтобы узнать, какая кнопка была нажата.

Код:

// OnCreate() - Либо динамически создавать кнопки, или найти их с помощью findViewById() и назначить на клик слушателя

for(int i = 0; i < MAX_BUTTONS; i++){ 
    // Create a button here 
    button.setOnClickListener(this); 
} 

// OnClick()

switch(view.getId(){ 
    case R.id.btn_one: 
     // do something 
     break; 
    ... 
} 
0
****just implement View.OnClickListener and override the onClick(View v) as 
    public class YourActivity implements Activity implements View.OnClickListener 
    { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     f1 =(Button) findViewById(R.id.f1); 
     f2 =(Button) findViewById(R.id.f2); 
     f1.setOnClickListener(this); 
     f2.setOnClickListener(this); 

      @Override 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 

      switch(v.getId()) 
      { 
      case R.id.f1: //your implementation 
      break; 
      case R.id.f2: //your implementation 
      break; 
      } 
     } 
    } 
+0

Очень новое для затмения и андроида. Я пробовал все это, но получаю много ошибок. Мне нужно учиться немного больше. Может ли кто-нибудь отправить мне полный проект щелчка на кнопке, который я могу импортировать в eclipse и посмотреть технику. Мне нравится андроид: onclick = "onButtonClicked" вариант Еще раз спасибо за все примеры кода. Если кто-то может написать мне [email protected], это было бы здорово. – Bobby

0

определите глобальную достоверность, как это в вашей деятельности.

private OnClickLister listener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      clearbutton(); 
      ((Button)v).setBackgroundColor(Color.RED); 
      intbtnSelect=v.getTag(); 


     } 
    } 

SetTag() данные каждой кнопки в макете, как 1-2-3 ------ независимо

и установить на все кнопки этого слушателя.

f1 =(Button) findViewById(R.id.f1); 
f1.setTag(1); 
f2 =(Button) findViewById(R.id.f2); 
f2.setTag(2); 
f1.setOnClickListener(listener); 
f2.setOnClickListener(listener); 

Итак, при нажатии кнопки intbtnSelect получит тег кнопки. Вам не нужны инструменты View.OnClickListener из вашей активности.

+0

Я бы предпочел альтернативу @blackbelt, внедряя OnClickListner вместо сохранения глобальной переменной – MatheusJardimB

0

Учитывая официальной документации Android: http://developer.android.com/guide/topics/ui/controls/button.html

Метод вы объявляете в андроида: OnClick атрибут должен иметь подпись точно так, как показано выше. В частности, метод должен:

быть публичными

Возвращение недействительным

Определить вид в качестве единственного параметра (это будет быть на вид, что была нажата)

Так, в XML название метода

android:onclick="onButtonClicked" 

и в деятельности:

public void onButtonClicked(View v) { 
    switch (v.getId()) { 
    case R.id.Button1: 

    break; 
    case R.id.Button2: 

    break; 
    . 
    . 
    . 
    . and so on 
    case R.id.Button10: 

    break; 
    } 
} 
0

У меня такая же проблема, но я нашел лучшее решение (по крайней мере для меня) сначала нужно создать список Баттона, то целочисленный массив с идентификатором

Button[] listBtn = new Button[3]; 
    IntId[] idList = {R.id.btn1, R.id.btn2, R.id.btn3}; 

    for(int i = 0 ; i < listBtn.length ; i++) 
     listBtn[i] = (Button) findViewById (idList[i]); 

    for(Button btn:listBtn) 
     btn.setOnClickListener(btnListener); 

    ....... 

    private View.OnClickListener btnListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      for(int i = 0 ; i < listBtn.length ; i++){ 

       if(v.getId() == idArray[i]){ 

        //do something 
        String str = "Button number : "+ i; 
        Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show(); 
       } 
      } 

     } 
    }; 

`

0
public class ExampleActivity extends AppCompatActivity implements View.Onclicklistener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    f1 =(Button) findViewById(R.id.f1); 
    f2 =(Button) findViewById(R.id.f2); 
    Utils.setObjectOnClickListener(this, f1, f2); 

@Override 
    public void onClick(View view) { 
    Intent intent = null; 
    switch (view.getId()) { 
     case R.id.f1: 
     // Do your code here 
     break; 
     case R.id.f2: 
     // Do your code here 
     break; 
} 

} 

In your Utils.class define this method 

public static void setObjectOnClickListener(View.OnClickListener listener, View... views) { 
     for (View view : views) { 
      view.setOnClickListener(listener); 
     } 
    } 
Смежные вопросы