2015-06-10 2 views
0

У меня есть пользовательский вид с Toggle Buttons для всех строк. У меня есть onlick listner для ToggleButton, и я пытаюсь установить статус всех переключающих кнопок в listview равным false, кроме того, который я пресекал. Я разместил код для адаптера ниже. Пожалуйста, помогите мне с этим.Кнопка Toggle в CustomList View

Чтобы сделать его намного более простым, я должен установить состояние ToggleButton в True при нажатии/нажатии, а все остальные кнопки переключателя - False. Кроме того, как кнопка группы радио. Пожалуйста, порекомендуйте.

package Test.in.example.testairlight; 

import java.util.ArrayList; 

import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.ToggleButton; 

public class PaAdapter extends ArrayAdapter<PaModel> { 

    SQLiteDatabase db; 
    private DBHelper dbH; 
    private ArrayList<PaModel> objects; 


    public PaAdapter(Context context, int textViewResourceId, ArrayList<PaModel> objects) { 
     super(context, textViewResourceId, objects); 
     this.objects = objects; 
    } 

    public View getView(int position, View convertView, ViewGroup parent){ 

     View v = convertView; 
     final Context cc=parent.getContext(); 

     if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.pa_list_item, null); 
     } 

     PaModel i = objects.get(position); 

     if (i != null) { 

      TextView ttd = (TextView) v.findViewById(R.id.devicelocation); 
      final TextView mtd = (TextView) v.findViewById(R.id.deviceid); 
      TextView dzone = (TextView) v.findViewById(R.id.txtzonedetail); 
      final ToggleButton togglePA = (ToggleButton) v.findViewById(R.id.togglePA); 
      final ToggleButton toggleAlert = (ToggleButton) v.findViewById(R.id.toggleAlert); 
      final ToggleButton toggleListen = (ToggleButton) v.findViewById(R.id.toggleListen); 


      if (ttd != null){ 
       ttd.setText(i.getDevicelocation()); 
      } 

      if (mtd != null){ 
       mtd.setText(String.valueOf(i.getDeviceid())); 
      } 



     toggleListen.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 


       //// Set Everything to OFF State 
       //// Turn ON only the active Item 



      } 
     }); 

    ////// Listen Button 







     if (dzone !=null){ 
      dzone.setText(i.getDevicezonedetail()); 

     } 


        } 


     return v; 
    } 




} 
+0

Вы хотите установить все кнопки только в элементе listitem (где был нажат toggleButton) на false или на все кнопки по всему списку? – theMfromA

ответ

0

Нечто подобное?

toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
         // do whatever you want here 
         togglePA.setChecked(false); 
         toggleAlert.setChecked(false); 
       } 
      } 
     }); 
0

Не знаю, хотите ли вы установить все кнопки списка в false или просто кнопки в текущем списке. Итак, давайте посмотрим правде в глаза первые:

  1. Установите все кнопки в целом списке ЛОЖЬ (кроме щелкнул один):

Вы могли бы начать делать двумерную ArrayList из ToggleButtons, как это в вашем адаптере:

ArrayList<ToggleButton[]> tButtons = new ArrayList<ToggleButton[]>(); 

Итак, есть ArrayList ToggleButton-Arrays. Каждый ToggleButton [] состоит из трех объектов ToggleButton. Количество ToggleButton-Arrays в ArrayList не определено.

Теперь, вы должны установить свои ToggleButtons в ArrayList, внутри GetView():

//other code here 
final ToggleButton togglePA = (ToggleButton) v.findViewById(R.id.togglePA); 
final ToggleButton toggleAlert = (ToggleButton) v.findViewById(R.id.toggleAlert); 
final ToggleButton toggleListen = (ToggleButton) v.findViewById(R.id.toggleListen); 
ToggleButton[] tButtonsInListItem; 
    if(tButtons.get(position) == null) { 
     tButtonsInListItem = new ToggleButton[3]; 
     tButtons.set(position, tButtonsInListItem); 
    } else { 
     tButtonsInListItem = tButtons.get(position); 
    } 
tButtonsInListItem[0] = togglePA; 
tButtonsInListItem[1] = toggleAlert; 
tButtonsInListItem[2] = toggleListen; 

Теперь у вас есть все ваши ToggleButtons готовы к модификации!

Так вот код:

toggleListen.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       for(ToggleButton[] tButtonsArray : tButtons) { 
        for(ToggleButton tButton : tButtonsArray) { 
         if(tButton == buttonView) { 
          tButton.setChecked(true); 
         } else { 
          tButton.setChecked(false); 
         } 
        } 
       } 
      } 
     } 
    }); 

Если вы хотите просто установить кнопки одного и того же ListItem к ложным, пожалуйста, дайте мне знать :)

Edit: Возможно, я должен сказать, что это не лучшее решение, на мой взгляд. Я действительно думаю, что у вас должны быть данные (true/false) где-то в вашей модели. Тогда вы можете просто манипулировать моделью и вернуть данные модели в представление (ToggleButtons) для отображения.