2013-02-18 5 views
1

Я в настоящее время работаю над приложением для Android, и у меня было несколько вопросов.Android: много кнопок, один OnClickListener?

1) В моем приложении есть раздел «Модификация батареи». Их будет более 50 кнопок для этого. как:.

public class MyActivity extends Activity implements OnClickListener { 

    @Override public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button buttonA = (Button) findViewById(R.id.buttonA);  
    buttonA.setOnClickListener(this); 
    Button buttonB = (Button) findViewById(R.id.buttonB); 
    buttonB.setOnClickListener(this); 
    } 

//etc... etc... 

public void onClick(View v) { 

    switch (v.getId()) { 
    case R.id.buttonA: 
     // do something 
     break; 
    case R.id.buttonB: 
     // do something else 
     break; 
    } 
} 
} 

есть более простой способ сделать это при нажатии на кнопку батареи мод, он будет отображать изображение мод, а также с возможностью установки его Другое, чем изображение, это ll будет одинаковым с каждым модом. Если нет более простого способа.

+1

Если вы хотите, чтобы сделать его немного легче, вы можете указать андроида: onClick для кнопки в xml. Это даст функцию, которая будет вызываться при нажатии кнопки. Функция должна быть членом Activity. Легче писать десятки заданных вызовов. –

+0

Пожалуйста, разделите свой вопрос на два, чтобы вы могли получить ответы на конкретные вопросы. Каждый пост на SO должен иметь только ОДИН вопрос. – 323go

+1

Ваш вопрос должен соответствовать вашему названию. Вы можете задать несколько, если они тесно связаны и по-прежнему соответствуют названию. Но, похоже, ваш второй вопрос не делает. – wtsang02

ответ

0

Что отличается идентификатор. Таким образом, вы не можете пройти через это и вам нужно будет ввести его как:

private static final BUTTON_IDS={R.id.buttonA,R.id.buttonB,R.id.buttonC....R.id.buttonZ}; 

затем петли он:

for(int i=0;i<BUTTON_IDS.lenght;i++{ 
     Button buttonXYZ = (Button) findViewById(BUTTON_IDS[i]);  
     buttonXYZ.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
        if(...){ 
         //your spical cases 
        } 
        else{ 
         //do awesome generic stuff. 
        } 

        } 
       }); 
    } 
1

Вы можете перебирать кнопках, как так -

int[] buttons = { R.id.button1, R.id.button2, ... , R.id.button30 }; 

for(int i=0; i < buttons.length; i++) { 
    final Button b = (Button) findViewById(buttons[ i ]); 
    b.setOnClickListener(...); 
} 
+0

Хорошо. Я все еще немного смущен. Может быть, я всего лишь n00b. Таким образом, вы создаете новое целое число, называемое кнопками, а затем добавляете в него идентификаторы кнопки. Затем вы создаете цикл for. поэтому, в то время как целое число i меньше, чем целые числовые кнопки, вы добавите 1 к int i. Затем вы создаете кнопку b, которая равна кнопкам в целочисленном i, а затем устанавливайте OnClickListener для этой кнопки. Я просто не понимаю, как это использовать. – user2082169

+0

'[]' рядом с 'int' означает, что это массив целых чисел.Цикл for перемещается по всем элементам массива, для каждой записи, находящей «Button» и назначая OnClickListener. – 323go

+0

А, я вижу. Благодаря! – user2082169

3

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

Object foo = new Object(); 
button1.setTag(foo); 

Вы можете использовать это, чтобы легко назначить тег имени образа, или, возможно, идентификатор Drawable ресурса. Затем используйте один onClick метод для всех этих кнопок, а просто распаковать тег, чтобы определить, каким он должен быть использован:

public void onClick(View v) 
{ 
    //any button was clicked. Now determine what to do using the tag. 

    Object tag = v.getTag(); 
    //TODO: use tag. 


} 
2

Вы можете установить OnClick функцию обратного вызова для каждой кнопки в файле макета. Что-то вроде:

<Button 
    android:id="@+id/buttonId" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/buttonText" 
    android:onClick="onItemClick" /> 

Затем добавьте в вашей деятельности/Фрагмент:

public void onItemClick(View view) { 
    // Do something in response to button click 
} 

Более подробная информация здесь: http://developer.android.com/guide/topics/ui/controls/button.html#HandlingEvents

Смежные вопросы