2016-04-08 22 views
0

Birçok öğretici ve SO'dan bazı hata sorularını takip ederek bir ExpandableListView hazırlıyorum. Üst liste, iki TextView ve standart düzen içeren bir ImageButton'dan oluşur. Çocuk listesi tek bir TextView'den oluşur. Veri kaynağı, etkinlikten SQLite Veritabanından gelir ve ArrayList'e oluşturulur.Android ExpandableListView getChildView tetiklemiyor

Sorun:

nasılsa üst grup listesi bile butonunun düzgün çalıştığını ama genişletmeye çalışırken, bu alışkanlık genişletmek normalde çalışır. Bu yüzden bazı Tost mesajı koymaya çalışıyorum ama etkinliği açtıktan sonra, Tost mesajı hiç gösterilmediği için tetiklemiyor getChildView() yöntemine benziyor.

ExpandableListAdapter sınıfı Sana vermek Herhangi bir yardım için teşekkür ederiz bu

public class InventoryListExpandableListAdapter extends BaseExpandableListAdapter { 

    private Context context; 
    private ArrayList<Inventory> data; 
    private HashMap<String, ArrayList<String>> list_data; 

    public InventoryListExpandableListAdapter(Context context, ArrayList<Inventory> data, HashMap<String, ArrayList<String>> list_data) { 
     this.context = context; 
     this.data = data; 
     this.list_data = list_data; 
    } 

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

    @Override 
    public int getChildrenCount(int groupPosition) {return list_data.get(data.get(groupPosition)).size();} 

    @Override 
    public Inventory getGroup(int groupPosition) {return data.get(groupPosition);} 

    @Override 
    public Object getChild(int groupPosition, int childPosition) {return list_data.get(data.get(groupPosition).getCode()).get(childPosition);} 

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

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

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

    @Override 
    public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      final Inventory inventory = getGroup(groupPosition); 

      convertView = View.inflate(context, R.layout.listview_layout_two_row_delete, null); 
      ImageButton btnDelete = (ImageButton)convertView.findViewById(R.id.btnDelete); 
      TextView text1 = (TextView)convertView.findViewById(R.id.text1); 
      TextView text2 = (TextView)convertView.findViewById(R.id.text2); 

      text1.setText(inventory.getCode()); 
      text2.setText(inventory.getItem()); 

      btnDelete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(context, "DELETED", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
     return convertView; 
    } 

    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
     final String childText = (String)getChild(groupPosition, childPosition); 
     LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = infalInflater.inflate(R.layout.listview_layout_single_text, null); 
     } 
     Toast.makeText(context, "Make Child number "+String.valueOf(childPosition), Toast.LENGTH_SHORT).show(); 

     TextView text1 = (TextView)convertView.findViewById(R.id.text1); 
     text1.setText(childText); 
     return convertView; 
    } 

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

} 

gibidir. Teşekkür ederim.

+1

getChildrenCount' bunu kontrol ettim 0 – Blackbelt

+0

dönüyor 'çünkü muhtemelen çağrılmaz ve büyüklüğü değil 0 – poring91

cevap

0

değişiklik hasStableIds Yöntem

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

** Ben aynı sorunu bulmaya çalışırken saatlerce senin getGroupView Yöntemi :: **

@Override 
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      final Inventory inventory = getGroup(groupPosition); 

      convertView = View.inflate(context, R.layout.listview_layout_two_row_delete, null); 
      } 
      ImageButton btnDelete = (ImageButton)convertView.findViewById(R.id.btnDelete); 
      TextView text1 = (TextView)convertView.findViewById(R.id.text1); 
      TextView text2 = (TextView)convertView.findViewById(R.id.text2); 

      text1.setText(inventory.getCode()); 
      text2.setText(inventory.getItem()); 

      btnDelete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(context, "DELETED", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

     return convertView; 
    } 
+0

Hala çalışmıyor ise. Liste hala genişlemiyor – poring91

0

değiştirin, sadece bir şey olduğunu fark etmek Benim tarafımda ölü basit:

  1. Resimdeki Görünümü genişletmek için dokunmayı engelleyen GroupView.

android: düzeltmek için bunu kullanın odaklanabilir = "false" android: focusableInTouchMode = "false"

    grubu görünümü genişletilmiş olmadığından,
  1. var Gösterilmeyecek bir görünüm almak için CPU döngülerini boşa harcamayın.
  2. Çocuklarla ilgili bağdaştırıcıdaki tüm yöntemler çağrılmaz. expandableListView.expandGroup (0 ... n) çağırarak

deneyin elle) (genişletmek ve ben getChildView olması farklı bir yol bulmuş

0

adaptörü çocukla ilgili yöntemler denilen olmadığını görmek için ExpandedListAdapter sınıfında otomatik olarak çağrılmadığında çağrılır.Bu, bir şekilde sorunu çözdüğü bir kısayoludur. Onay kutusu listesindeki ana grup öğeleriyle genişletilmiş liste görünümü vardır. Onay kutularını açmak, alt öğeleri görüntüler. . GetGroupView() işlevini nasıl kodladım.

@Override 
public View getGroupView(final int groupPosition, final boolean isExpanded, View convertView, final ViewGroup viewGroup) 
{ 
    if (convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) m_context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.expandable_list_milk_type,null); 
    } 
    final CheckBox cbMilkType = (CheckBox) convertView.findViewById(R.id.cb_milk_type); 
    cbMilkType.setText(m_listMilktype.get(groupPosition)); 

    cbMilkType.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      ExpandableListView expandableListView = (ExpandableListView)viewGroup; 
      cbMilkType.toggle(); 
      if (!isExpanded) { 
       expandableListView.expandGroup(groupPosition); 
      } 
      else { 
       expandableListView.collapseGroup(groupPosition); 
      } 
     } 
    }); 
    return convertView; 
} 
İlgili konular