5

私はExpandableListViewを使用して基本的なAndroidアプリケーションを構築しようとしています。データを表示した後、グループをクリックすると、グループは展開されません。ExpandableListViewは常に折りたたまれています

ここに私のコードですが、助けてもらえますか?

アダプタ



    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); 

     } 
    } 

とシンプルなXMLレイアウト

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> 

おかげ

答えて

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

これは、子として1を返します。それは問題かもしれません。代わりに子要素の数を返します

+0

すべてのサブリストには常に1つのレコードのみが含まれ、データは同じ配列リスト – PulsAm

6

こんにちは、私は以下のコードはあなたを助けると思います。リストビューを崩壊させないようにする。

int count = exadapter.getGroupCount(); 

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

あなたexpandablelistビューのコード上で使用.ITデフォルトですべてのグループを展開するには、あなたの問題

1

を解決するための行の下に追加します。あなたのgetGroupView()方法に

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

これはif節if (convertView == null)内で実行する必要があります。そうしないと、ビューを折りたたむことができなくなります。

@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; 
    } 
関連する問題