2011-03-24 22 views
53

Olası Çoğalt:
Android: Binding data from a database to a CheckBox in a ListView?Checkbox ile Android ListView ve tüm tıklanabilir

i ürün aşağıdaki düzenini

------------------------- 
[CB] TV   TV 
------------------------- 

CB sahip bir ListView kullanmak istediğiniz bir onay kutusu ve TV bir Textview.

Artık bir ListView'de tıklanabilir öğelerin bulunamayacağı bir yeri okudum. Bazılarınız varsa, ListItems'i tıklayamayacaksınız. Ancak GoogleMail uygulamasına bakarsanız, bu mümkündür. Birkaç mesajı onay kutusuyla işaretleyebilirim (ve sonra onlar için bir eylem seçebilirim) veya başka bir ekrana geçmek için ListItem'e (veya dpad ile ilerleyerek) tıklayabilirim. Birisi nasıl bir kod/örnek var bu nasıl mümkün olabilir? Kodun altında

+0

seçebilir ama mümkün olduğu hareket nedeniyle sürükleyin, tıklayın ve longClick aynı etkinlik değil. Ayrıca, onay kutusunun hitbox'ı liste görünümünün üzerindedir. – Fredrik

+0

[http://stackoverflow.com/questions/1505751/android-binding-data-from-a-database-to-a-checkbox-in-a-listview] Koduna bakın (Birden çok öğe seçebilirsiniz) liste görünümünde. Kontrol et (burada) (http://appfulcrum.com/?p=281) Metin ve Görüntü örneğiyle: [burada] (http://appfulcrum.com/?p=311) –

+3

Bu soru bir kopya değil. Diğer soru, CursorAdapter'ın doğru db sütunlarını belirli görünümlere nasıl bağlayacağıdır. Bu soru hiç bir şekilde veriyi bağlamakla ilgili değil, bir ListView'de tıklanabilir bir onay kutusu oluşturma hakkında. –

cevap

5

size yardımcı olacaktır: Bu yardımcı olur

public class DeckListAdapter extends BaseAdapter{ 

     private LayoutInflater mInflater; 
     ArrayList<String> teams=new ArrayList<String>(); 
     ArrayList<Integer> teamcolor=new ArrayList<Integer>(); 


     public DeckListAdapter(Context context) { 
      // Cache the LayoutInflate to avoid asking for a new one each time. 
      mInflater = LayoutInflater.from(context); 

      teams.add("Upload"); 
      teams.add("Download"); 
      teams.add("Device Browser"); 
      teams.add("FTP Browser"); 
      teams.add("Options"); 

      teamcolor.add(Color.WHITE); 
      teamcolor.add(Color.LTGRAY); 
      teamcolor.add(Color.WHITE); 
      teamcolor.add(Color.LTGRAY); 
      teamcolor.add(Color.WHITE); 


     } 



     public int getCount() { 
      return teams.size(); 
     } 


     public Object getItem(int position) { 
      return position; 
     } 


     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 


      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.decklist, null); 

       holder = new ViewHolder(); 
       holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow); 
       holder.text = (TextView) convertView.findViewById(R.id.textname); 

      .......here you can use holder.text.setonclicklistner(new View.onclick. 

         for each textview 


       System.out.println(holder.text.getText().toString()); 

       convertView.setTag(holder); 
      } else { 

       holder = (ViewHolder) convertView.getTag(); 
      } 



      holder.text.setText(teams.get(position)); 

      if(position<teamcolor.size()) 
      holder.text.setBackgroundColor(teamcolor.get(position)); 

      holder.icon.setImageResource(R.drawable.arraocha); 







      return convertView; 
     } 

     class ViewHolder { 
      ImageView icon; 
      TextView text; 



     } 
} 

Umut.

19

"simple_list_item_multiple_choice"

ArrayAdapter<String> adapter; 

List<String> values; // put values in this 

//Put in listview 
adapter = new ArrayAdapter<UserProfile>(
this, 
android.R.layout.simple_list_item_multiple_choice, 
values); 
setListAdapter(adapter);  
+1

Yerleşimler içinde yerleşik olanlar, yalnızca basit bir düzen istiyorsanız yararlıdır. 2 metin görünümünde bir onay kutusu yapmak istediğini gösteriyor. –

101

için listview adaptör XML düzeninde focusable="false" olarak CheckBox ayarlayın ayarlayın. Aksi takdirde liste görünümünden tıklama etkinliklerini çalacaktır. Eğer bunu yaparsanız

Elbette, el liste öğesi yerine CheckBox ait tıklandığında kontrol/denetlenmeyen olarak CheckBox işaretleme işlemek gerekir, ancak muhtemelen bu zaten istiyorum.

+1

Teşekkürler, bu benim için çalıştı;) – Johannes

+29

CheckBox için focusable = "false" ayarı, liste görünüm öğelerini tıklamama izin veriyor, ancak onay kutusunun kendisini tıklamamı engellemiyor. Bunun için, onay kutusu için clickable = "false" ayarlamam gerekiyor. – basilisk

+0

Liste görünümü android üzerinde tıklama tıklayın onay kutusunu tıklatmaya nasıl izin verilir? –

9
holder.checkbox.setTag(row_id); 

ve

holder.checkbox.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        CheckBox c = (CheckBox) v; 

        int row_id = (Integer) v.getTag(); 

        checkboxes.put(row_id, c.isChecked()); 


       } 
     }); 
7

bu kod benim proyect çalışır ve ben ben atm kodu yoksa listview öğesi ve onay

<?xml version="1.0" encoding="utf-8"?> 
<!-- Single List Item Design --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:clickable="true" > 

    <TextView 
     android:id="@+id/label" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="4" /> 

    <CheckBox 
     android:id="@+id/check" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:focusable="false" 
     android:text="" > 
    </CheckBox> 

</LinearLayout> 
+0

@Rob Evet özür dilerim. – Borja

İlgili konular