5

Próbuję zbudować podstawową aplikację na Androida za pomocą ExpandableListView. Po umieszczeniu danych w widoku widzę tylko grupy, jeśli klikam na grupy, które nie są rozwijane.ExpandableListView jest zawsze zwinięty

Oto mój kod, czy ktoś może pomóc?

Adapter



    public class PhraseAdapter extends BaseExpandableListAdapter { 

     private LayoutInflater inflater; 

     private List data; 

     public PhraseAdapter(Context context) { 
      inflater = LayoutInflater.from(context); 

     } 

     public void setData(List data) { 
      this.data = data; 
     } 

     public View inflate(int viewId) { 
      View view = inflater.inflate(viewId, null); 
      return view; 
     } 

     public void updateView(List categories) { 
      setData(categories); 
      notifyDataSetChanged(); 
     } 

     static class ViewHolder { 
      TextView name; 
     } 

     static class ViewChildHolder { 
      TextView phonetix; 
      TextView orginal; 
     } 

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

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

     @Override 
     public View getChildView(int groupPosition, int childPosition, 
       boolean isLastChild, View convertView, ViewGroup parent) { 
      final ViewChildHolder holder; 
      if (convertView == null) { 
       convertView = inflater.inflate(R.layout.phrases__extra_item, null); 
       holder = new ViewChildHolder(); 
       holder.phonetix = (TextView) convertView 
         .findViewById(R.id.phrases_phonetix); 
       holder.orginal = (TextView) convertView 
         .findViewById(R.id.phrases_original); 

       convertView.setTag(holder); 
       convertView.setClickable(true); 

      } else { 
       holder = (ViewChildHolder) convertView.getTag(); 
      } 

      holder.phonetix.setText(data.get(groupPosition).getPhonetix()); 
      holder.orginal.setText(data.get(groupPosition).getOriginal()); 
      convertView.setFocusableInTouchMode(true); 
      return convertView; 
     } 

     @Override 
     public int getChildrenCount(int groupPosition) { 
      return 1; 
     } 

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

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

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

     @Override 
     public View getGroupView(int groupPosition, boolean isExpanded, 
       View convertView, ViewGroup parent) { 
      final ViewHolder holder; 

      if (convertView == null) { 
       convertView = inflater.inflate(R.layout.phrases_item, null); 
       holder = new ViewHolder(); 
       holder.name = (TextView) convertView 
         .findViewById(R.id.phrases_text); 
       convertView.setTag(holder); 
       convertView.setClickable(true); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
      holder.name.setText(data.get(groupPosition).getName()); 
      return convertView; 

     } 

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

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

PhrasesActivity



    public class PhrasesActivity extends Activity { 
     private PhraseAdapter phraseAdapter; 
     private PhraseDao dao; 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.phrases); 
      dao = new PhraseDao(); 


      final ExpandableListView mainListView = (ExpandableListView) findViewById(R.id.phrases_list); 
      phraseAdapter = new PhraseAdapter(this); 
      phraseAdapter.setData(dao.getPhrasesByCategoryId(1)); 
      mainListView.setAdapter(phraseAdapter); 

     } 
    } 

i proste xml układy

phrases.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 



<ExpandableListView 
    android:id="@+id/phrases_list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:groupIndicator="@null" 
    android:clickable="true" /> 

</LinearLayout> 

phrases_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:clickable="true" 
android:gravity="center_vertical|left" 
android:orientation="vertical" 
android:paddingBottom="0dip" 
android:paddingLeft="20dip" 
android:paddingRight="20dip" 
android:paddingTop="0dip" > 

<TextView 
    android:id="@+id/phrases_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="0dip" 
    android:paddingLeft="0dip" 
    android:paddingRight="0dip" 
    android:paddingTop="0dip" > 
</TextView> 

</LinearLayout> 

phrases__extra_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:clickable="true" 
android:gravity="center_vertical|left" 
android:orientation="vertical" 
android:paddingBottom="0dip" 
android:paddingLeft="20dip" 
android:paddingRight="20dip" 
android:paddingTop="0dip" > 

<TextView 
    android:id="@+id/phrases_phonetix" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="0dip" 
    android:paddingLeft="0dip" 
    android:paddingRight="0dip" 
    android:paddingTop="0dip" > 
</TextView> 

<TextView 
    android:id="@+id/phrases_original" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="0dip" 
    android:paddingLeft="0dip" 
    android:paddingRight="0dip" 
    android:paddingTop="0dip" > 
</TextView> 

</LinearLayout> 

dzięki

Odpowiedz

0
public int getChildrenCount(int groupPosition) { 
return 1; 
} 

ta zwraca 1 jako dziecko. To może być problem. Zamiast tego zwróć liczbę elementów potomnych

+0

Wszystkie podlisty zawierają zawsze tylko jeden rekord, dane pochodzą z tej samej listy tablic – PulsAm

6

Witam, myślę, że poniższy kod pomoże. Które zapobiegają zawaleniu widoku listy.

int count = exadapter.getGroupCount(); 

    for (int i = 0; i < count; i++) 
    { 
     expListView.expandGroup(i); 
    } 

Zastosowanie powyższego kodu w widoku expandablelist .it rozwiązać problemu

1

Aby rozwinąć wszystkie grupy domyślnie dodawać poniżej linii.

((ExpandableListView) parent).expandGroup(groupPosition); 

Do metody getGroupView().

Należy to zrobić w ramach klauzuli if if (convertView == null), ponieważ nie będzie można zwinąć widoku.

@Override 
    public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) 
    { 
     final ViewHolder holder; 

     if (convertView == null) 
     { 
      ((ExpandableListView) parent).expandGroup(groupPosition); 

      convertView = inflater.inflate(R.layout.phrases_item, null); 
      holder = new ViewHolder(); 
      holder.name = (TextView) convertView.findViewById(R.id.phrases_text); 
      convertView.setTag(holder); 
      convertView.setClickable(true); 
     } 
     else 
     { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.name.setText(data.get(groupPosition).getName()); 
     return convertView; 
    } 
Powiązane problemy