5

Tôi đang cố gắng xây dựng ứng dụng Android cơ bản bằng cách sử dụng ExpandableListView. Sau khi đưa dữ liệu vào xem, tôi chỉ thấy các nhóm, nếu tôi nhấp vào các nhóm mà họ không mở rộng.Mở rộngListView luôn bị thu hẹp

Đây là mã của tôi, ai đó có thể giúp bạn?

Adaptor



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

     } 
    } 

Và xml đơn giản bố trí

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

012.351.
<?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> 

nhờ

Trả lời

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

này trả về 1 như đứa trẻ. Điều đó có thể là vấn đề. Thay vì trả lại số phần tử con

+0

Tất cả các danh sách con luôn chứa chỉ một bản ghi, dữ liệu đến từ cùng một danh sách mảng – PulsAm

6

Xin chào, tôi nghĩ mã dưới đây sẽ giúp bạn. Điều này ngăn chặn sự sụp đổ chế độ xem danh sách.

int count = exadapter.getGroupCount(); 

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

sử dụng trên mã trong cái nhìn expandablelist bạn .it giải quyết vấn đề của bạn

1

Mở rộng tất cả các nhóm theo mặc định thêm phía dưới đường.

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

Phương thức getGroupView() của bạn.

Điều này phải được thực hiện trong mệnh đề if if (convertView == null) hoặc bạn sẽ không thể thu gọn chế độ xem.

@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; 
    } 
Các vấn đề liên quan