2010-11-18 24 views
1

Yeniim, durumu iyi açıklayamam. Daha fazla bilgiye ihtiyacınız varsa lütfen bize bildirin. Özel liste görünümünde diğer (onay kutusu) görünümü nasıl bulunur?

Böyle bir liste görünümü uygulamak çalışıyorum:

[textview][button][checkbox] 
[textview][button][checkbox] 
[textview][button][checkbox] 
[textview][button][checkbox] 

otomatik olarak kontrolsüz diğer onay istemek ben onlardan biri tıkladığında. Yani tek bir seçim gibi. Çoktan seçmeli uygulayabilen aşağıdaki kodları yazıyorum ama bunu tek seçenek olarak değiştirmeye çalıştığımda sorun yaşıyorum.

checkBoxOnClickListener içinde Başka (onay kutusu) görünümü bulamıyor ve bunları değiştiremiyorum. Herhangi bir öneri pals? Ekspertiz becerilerimin zayıf olduğunu düşünüyorsanız bana bildirin.

Teşekkür ederiz.

public class MyAdapter extends SimpleAdapter { 

    Map<Integer, Boolean> map; 

    LayoutInflater mInflater; 

    private List<? extends Map<String, ?>> mList; 

    public MyAdapter(Context context, List<Map<String, String>> data, int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 
     map = new HashMap<Integer, Boolean>(); 
     mInflater = LayoutInflater.from(context); 
     mList = data; 
     for (int i = 0; i < data.size(); i++) { 
      map.put(i, false); 
     } 
     if (data.get(0).get("value").equals("Male") || data.get(0).get("value").equals("Yes")) { 
      map.put(1, true); 
     } 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.rapid_diagnosis_row, null); 
     } 
     TextView textView = (TextView) convertView.findViewById(R.id.multiple_question); 
     textView.setText((String) mList.get(position).get("value")); 

     CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.multiple_checkbox); 
     checkBox.setChecked(map.get(position)); 

     // save position and checking status into tag 
     checkBox.setTag(position); 
     checkBox.setOnClickListener(checkBoxOnClickListener); 

     return convertView; 
    } 

    public OnClickListener checkBoxOnClickListener = new OnClickListener() { 
     public void onClick(View v) { 
      // ((CheckBox) v).toggle(); 
      boolean checked = ((CheckBox) v).isChecked(); 
      if (checked) { 
       ((CheckBox) v).setChecked(true); 
      } else { 
       ((CheckBox) v).setChecked(false); 
      } 
      int p = (Integer) (v.getTag()); 
      mSimpleAdapter.map.put(p, checked); 

          // this cannot works, helppp 
      ListView lv = ((ListView) (v.getParent().getParent())); 
      (CheckBox) cb = lv.findViewWithTag(1); 
      cb.toggle(); 
        ..................... 

............... } }; }

cevap

1

findViewWithTag(1) sorunu dönüyor mu? Bu, findViewWithTag()'un etiketinizi yinelemeli olarak aramadığı olabilir. Eğer ebeveyninize iki kez yukarı çıkacak olursanız, ListView ve findViewWithTag() numaralı telefonlara ulaşırsanız, etiketlenecek düzen nesnelerine bakarsınız.

ListView'un tüm çocuklarından geçmeli ve daha sonra her birinin sahip olduğu onay kutusunu bulmalısınız. Buradaki kod snippet'inden bahsetmek zor, ancak neden kimlikler yerine onay kutularını bulmaya çalışmak için çalışma zamanı setlerini kullanıyorsunuz?

+0

Teşekkür ederim Thomas. Problem çözüldü. Aslında sadece iki satır varsa sadece tek bir seçim yapmam gerekiyor. Kodları çirkin ama çalışır: ListView lv = (ListView) (v.getParent(). GetParent()); \t \t \t \t \t Görünüm görünümü = lv.findViewWithTag (Math.abs (p - 1)); \t \t \t \t CheckBox cb = (CheckBox) (view.findViewById (R.id.multiple_checkbox)); \t \t \t \t cb.toggle(); – ThinkChris

+0

Sorununuzu çözebildiğinize sevindim! :) – Thomas

1

İşte

v

pv

event_id_tag ​​ana aktivitesi üzerine verdi etikettir onun üstüdür çağıran görünümüdür "edittext" ile bir örnek verilmiştir.

public void onClick(View v) { 
    View pv = (View)v.getParent(); 
    EditText et = (EditText)pv.findViewWithTag("event_id_tag"); 
İlgili konular