2010-09-02 17 views
5

Yakın zamanda genişletilebilir liste görünümleriyle oynuyorum.Android: GenişletilebilirList Görünümler ve Onay Kutular

Çocuk görünümü öğelerinden biri olarak bir onay kutusu bulunan liste görünümü almaya çalışıyorum.

Bu eğitici dosyayı http://mylifewithandroid.blogspot.com/2010/02/expandable-lists-and-check-boxes.html buldum ve mükemmel görünüyordu. Ancak onu derlediğimde ve onunla oynamaya başladığımda, onun çok arabasını farkettim. Bir grupta bir kutunun işaretlenmesi, başka bir gruptan rastgele bir kutunun işaretlenmesine veya işaretini kaldırabilmesine neden olabilir.,

Bu, bu konuda bulabildiğim tek derstir, Çok sayıda uygulamada kullanılacak bir şey gibi görünüyor, Merak ediyordum, bununla ilgilenen başka iyi bir öğretici mi yoksa kaynak var mı?

cevap

3

rakesh, yani hem

    yılında convertView parametreye yeni değer atamak çok önemlidir seninyılında
  • public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) ve
  • public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)

yöntemleriuzantısı.

Aksi takdirde, ebeveyn/alt oluşturucular önbellekten oluşturulacak ve size doğru şeyleri göstermeyeceklerdir.

Kullanıcının, izlenen hizmetle ilgili bir sorun olup olmadığı konusunda herhangi bir uyarıya ihtiyacı olup olmadığını gösteren onay kutusuna ihtiyacım var.

//hosts: the list of data used to build up the hierarchy shown by this adapter's parent list. 
private class MyExpandableListAdapter extends BaseExpandableListAdapter 
{ 
    private LayoutInflater inflater; 

    public MyExpandableListAdapter() 
    { 
     inflater = LayoutInflater.from(Binding.this); 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
    { 
     final Host host = hosts.get(groupPosition); 
     final boolean needsLargeView = isExpanded && (host.getTitle() != null) && (host.getTitle().length() > 0); 
     if (needsLargeView) 
      convertView = inflater.inflate(R.layout.grouprow_expanded, parent, false); 
     else 
      convertView = inflater.inflate(R.layout.grouprow, parent, false); 
     convertView.setBackgroundResource(host.getBackgroundResource(isExpanded)); 
     [...] 
     return convertView; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
    { 
     final Host host = hosts.get(groupPosition); 
     final NagService service = host.getServices().get(childPosition); 
     convertView = inflater.inflate(R.layout.childrow, parent, false); 
     convertView.setBackgroundResource(host.getChildBackgroundResource()); 
     convertView.findViewById(R.id.servicename_status).setBackgroundResource(service.getStatusBackground()); 
     [...] 
     CheckBox alertChb = (CheckBox) convertView.findViewById(R.id.alert); 
     alertChb.setChecked(service.isNeedsAlert()); 
     alertChb.setOnCheckedChangeListener(new YourCheckChangedListener(service)); 
     return convertView; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosition) 
    { 
     return hosts.get(groupPosition).getServices().get(childPosition); 
    } 

    @Override 
    public long getChildId(int groupPosition, int childPosition) 
    { 
     return childPosition; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) 
    { 
     return hosts.get(groupPosition).getServices().size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) 
    { 
     return hosts.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() 
    { 
     return hosts.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) 
    { 
     return groupPosition; 
    } 

    @Override 
    public void notifyDataSetChanged() 
    { 
     super.notifyDataSetChanged(); 
    } 

    @Override 
    public boolean isEmpty() 
    { 
     return ((hosts == null) || hosts.isEmpty()); 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) 
    { 
     return true; 
    } 

    @Override 
    public boolean hasStableIds() 
    { 
     return true; 
    } 

    @Override 
    public boolean areAllItemsEnabled() 
    { 
     return true; 
    } 
} 

kullanılan düzen arasından childrow.xml kutusunu içeren biridir:

İşte bu ulaşma yöntemim.

CheckedChanhedListener İçerisinde, etkilenen örnekte yeni durumu kaydetmelisiniz (benim durumumda, hizmet).

Bunu size

0

bu i hangi iyi kılavuz verilir bulundu budur

Hatta daha da iyisi, herkes kendi kod bu işe kazanılmış olan göstermeye ister misiniz ...

Teşekkür

Kev biz özel liste görünümü hale nasıl Dolayısıyla ister bir onay kutusu veya liste görünümü

http://techdroid.kbeanie.com/2009/07/custom-listview-for-android.html

içinde herhangi TextView'un 0 Teşekkür .. android için nagios müşteri geliştirme ve ben bulduğumda aynı problem vardı
+0

Teşekkür Rakesh yardımcı olan iyi bir öğretici gibi görünüyor umut, ancak yalnızca daha ExpandableListViews içinde intereseted am olarak liste görünümündeki, başa görünüyor .. –

İlgili konular