9

ExpandableListView'm neden genişlemediğini anlayamadığım hayatım için yapamam ... ExpandableListView için bulabildiğim her tıklama dinleyicisinde günlük ifadeleri kullandım ve aradıkları herhangi biri gibi görünmüyor.android expandablelistview tıklama etkinliklerini genişletmiyor ya da almıyor

Bu konuyla ilgili pek çok gönderi olduğunu biliyorum, ancak bunların hepsini okudum, çok şey denedim ve hiç şansım olmadı, umarım bir başkasıyla karşılaşması kolay olacak küçük bir hatayı kaçırdım.

Ana Etkinlik:

public class ForumListActivity extends Activity { 

    private static ArrayList<Forum> forumList; 
    private static ArrayList<ArrayList<SubForum>> subForumList; 
    private ExpandableListView forumListView; 
    private ForumListAdapter forumListAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.main_page); 
     this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

     forumListView = (ExpandableListView) this.findViewById(R.id.main_page_forum_list); 

     forumList = new ArrayList<Forum>(); 
     subForumList = new ArrayList<ArrayList<SubForum>>(); 
     setUpForums(this); 

     forumListAdapter = new ForumListAdapter(this, forumList, subForumList); 
     forumListView.setAdapter(forumListAdapter); 

     forumListView.setOnGroupExpandListener(new OnGroupExpandListener(){ 
      @Override 
      public void onGroupExpand(int groupPosition) { 
       Log.d("onGroupExpand", "this works?"); 
       for(int i=0; i<forumListAdapter.getGroupCount(); i++) { 
        if(i != groupPosition) 
         forumListView.collapseGroup(groupPosition); 
       } 
      } 
     }); 

     forumListView.setOnGroupClickListener(new OnGroupClickListener() { 
      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
       Log.d("onGroupClick:", "worked"); 
       parent.expandGroup(groupPosition); 
       return true; 
      } 
     }); 
    } 

Not: yöntem setUpForums() sadece sistem dizileri alır ve forumList ve subForumList

ListViewAdapter içine koyar:

public class ForumListAdapter extends BaseExpandableListAdapter { 

    private ArrayList<Forum> groups; 
    private ArrayList<ArrayList<SubForum>> children; 
    private Context ctx; 

    public ForumListAdapter(Context ctx, ArrayList<Forum> groups, ArrayList<ArrayList<SubForum>> children) { 
     this.ctx = ctx; 
     this.groups = groups; 
     this.children = children; 
    } 



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



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



    @Override 
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      LayoutInflater inflater = LayoutInflater.from(ctx); 
      convertView = inflater.inflate(R.layout.forum_list_child_item_row, null); 
     } 

     SubForum currentSubForum = children.get(groupPosition).get(childPosition); 
     TextView name = (TextView)convertView.findViewById(R.id.child_row_forum_title); 
     TextView desc = (TextView)convertView.findViewById(R.id.child_row_forum_description); 

     if (name != null) 
      name.setText(currentSubForum.getName()); 

     if (desc != null) 
      desc.setText(currentSubForum.getDescription()); 

     convertView.setFocusableInTouchMode(true); 
     return convertView; 
    } 



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



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



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



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



    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     if (convertView == null) 
     { 
      LayoutInflater inflater = LayoutInflater.from(ctx); 
      convertView = inflater.inflate(R.layout.forum_list_group_item_row, null); 
     } 

     Forum currentForum = (Forum) groups.get(groupPosition); 
     TextView name = (TextView) convertView.findViewById(R.id.group_item_forum_title); 
     //ImageView image = (ImageView) convertView.findViewById(R.id.group_item_expander_image); 

     if(name != null) 
      name.setText(currentForum.getName());   

     /* 
     if(image != null) { 
      int[][] group_state_sets = {{}, {android.R.attr.state_expanded}}; 
      image.setVisibility(View.VISIBLE); 
      int stateSetIndex = (isExpanded ? 1 : 0) ; 
      Drawable drawable = image.getDrawable(); 
      drawable.setState(group_state_sets[stateSetIndex]); 
     } 
     */ 

     return convertView; 
    } 



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



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


} 

Grup Düzeni:

<?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:background="@drawable/turquoise_gradient" 
    android:orientation="horizontal" 
    android:paddingTop="6dip" 
    android:paddingBottom="6dip" 
    android:paddingLeft="6dip" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/turquoise_gradient" 
     android:orientation="vertical" 
     android:padding="2dip" > 

     <TextView 
      android:id="@+id/group_item_forum_title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical|left" 
      android:gravity="left" 
      android:paddingLeft="5dip" 
      android:textColor="@color/white" 
      android:textSize="16dip" /> 

    </LinearLayout> 

    <!-- 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:gravity="center|right"> 

     <ImageView 
      android:id="@+id/group_item_expander_image" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:gravity="center" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:src="@drawable/collapse_down" /> 


    </LinearLayout> --> 

</LinearLayout> 

çocuk düzeni:

<?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:background="@drawable/turquoise_gradient" 
    android:orientation="horizontal" 
    android:paddingTop="6dip" 
    android:paddingBottom="6dip" 
    android:paddingLeft="6dip" > 


    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:padding="2dip" 
     android:background="@drawable/turquoise_gradient" > 

     <TextView 
      android:id="@+id/child_row_forum_title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:layout_gravity="center_vertical" 
      android:paddingLeft="5dip" 
      android:textColor="@color/white" 
      android:maxLines="1" 
      android:textSize="11dip" /> 

     <TextView 
      android:id="@+id/child_row_forum_description" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:layout_gravity="center_vertical" 
      android:paddingLeft="15dip" 
      android:textColor="@color/white" 
      android:maxLines="2" 
      android:textSize="11dip" /> 

    </LinearLayout> 

</LinearLayout> 

ana sayfa düzeni:

<?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:background="@color/black" 
    android:orientation="vertical" > 

    <ExpandableListView 
     android:id="@+id/main_page_forum_list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@color/black" 
     android:divider="@color/black" 
     android:dividerHeight="1dip" 
     android:clickable="true" /> 

</LinearLayout> 

Vereceğiniz her türlü yardım büyük

takdir! u herhangi bir veri hiç görünmez çocuk sahibi yoksa u chid için herhangi bir veri mevcut olması çünkü eğer

+0

orada çocuk verilerini yok çünkü onun u – Rakshi

+0

deneyin debug sahip olabilir metin düzenleri için – Rakshi

cevap

21

: Eğer üzerine tıklayın yalnızca grup sadece basitçe böyle listenizi somthing verilerinizi doldurmak onGroupExpand (int groupPosition) ya da başka bir yöntem overrirde gerekir bağışta bulunan kimse kendisini genişletileceği anlamına gelir Ayrıca sizin gibi benzer bir sorunla karşılaştı. Birkaç gün süren araştırmadan sonra, yanlış bir şey yaptığımı keşfettim. Bu yüzden küçük bir değişiklik yaparak doğru şekilde çalışmasını sağladım.

setOnGroupClickListener'da boolean onGroupClick(...) gövdesine bakalım.Sen "the click was handled"

genişletmek istiyorsanız yanlış dönmelidir demektir gerçek iade. Yani böyle yapmak öneririz:

forumListView.setOnGroupClickListener(new OnGroupClickListener() { 
    @Override 
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
      Log.d("onGroupClick:", "worked"); 
      parent.expandGroup(groupPosition); 
      return false; 
     } 
    }); 

android.widget.ExpandableListView sınıfında,/genişleyen grupları daraltma veya uygun çocuğa tıklama geçen sorumludur boolean handleItemClick(View v, int position, long id) adında bir yöntem yoktur.

/* It's a group click, so pass on event */ 
     if (mOnGroupClickListener != null) { 
      if (mOnGroupClickListener.onGroupClick(this, v, 
        posMetadata.position.groupPos, id)) { 
       posMetadata.recycle(); 
       return true; 
      } 
     } 

    /* expanding/collapsing/other tasks... */ 

Eğer onGroupClick dönüş gerçek için, 8 sınırının altında kod yürütülecek asla uygularsanız

. (Bu, grupların asla küçültülmeyeceğini, genişlemediğini gösterir)

Cevabım yardım ettiniz :-) iyi şanslar!

+0

sadece 3 gün baş ağrısı kurtardı.thanks ve büyük bir cevap için +1 –

+0

bunun için teşekkürler! –

6

muhtemelen u kontrol gereken üç şey,

  1. çek vardır.

2.Try çıkarmadan koşul denetimi siz kullanırken düzen inflaters

if (convertView == null) { 
    LayoutInflater inflater = LayoutInflater.from(ctx); 
    convertView = inflater.inflate(R.layout.forum_list_child_item_row, null); 
    } 
    da burada

    convertView = inflater.inflate(R.layout.forum_list_child_item_row,parent, false); 
    
Viewgroup geçmesi gerekiyor
  • +0

    için childs düzeninde bazı varsayılan metin değeri ekleme Kötü veri benim sorunumdu, tekrar teşekkürler! –

    0

    Etkinliğinize implements OnGroupExpandListener ekleyin. O zaman işe yarayacak. Aynı kullanıyorum, iyi çalışıyor.

    0

    Genişletilebilir listelerle çalışırken, grup genişletme varsayılan işlevdir. Ben ettik

    public class MyActivity extends Activity { 
    
        private ExpandableListView forumListView; 
        private ForumListAdapter forumListAdapter; 
        String[] forumList={"group 1","group 2","group 3"}; 
    String[][] subForumList={{"group 1 child1","group 1 child1","group 1 child3"}, 
            {"group 2 child1","group 2 child2","group 2 child3"}, 
            {"group 3 child1","group 3 child2","group 3 child3"}, 
            }; 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.main); 
    
    
    forumListView = (ExpandableListView) this.findViewById(R.id.main_page_forum_list); 
    
    
    
    
    forumListAdapter = new ForumListAdapter(this, forumList, subForumList); 
    forumListView.setAdapter(forumListAdapter); 
    
    
    
        /* forumListView.setOnGroupExpandListener(new OnGroupExpandListener(){ 
        public void onGroupExpand(int groupPosition) { 
         Log.d("onGroupExpand", "this shit works?"); 
         for(int i=0; i<forumListAdapter.getGroupCount(); i++) { 
          if(i != groupPosition) 
           forumListView.collapseGroup(groupPosition); 
         } 
        } 
    }); 
    
    forumListView.setOnGroupClickListener(new OnGroupClickListener() { 
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
         Log.d("onGroupClick:", "worked"); 
         parent.expandGroup(groupPosition); 
         return true; 
        } 
    });*/ 
        } 
    
        public class ForumListAdapter extends BaseExpandableListAdapter { 
    
         String[] groups; 
        String[][] children; 
        private Context ctx; 
    
        public ForumListAdapter(Context ctx, String[] groups, String[][] children) { 
        this.ctx = ctx; 
        this.groups = groups; 
        this.children = children; 
    } 
    
    public Object getChild(int arg0, int arg1) { 
        // TODO Auto-generated method stub 
        return children[arg0][arg1]; 
    } 
    
    public long getChildId(int arg0, int arg1) { 
        // TODO Auto-generated method stub 
        return arg1; 
    } 
    
    public View getChildView(int arg0, int arg1, boolean arg2, View arg3, 
         ViewGroup arg4) { 
        if (arg3 == null) { 
         LayoutInflater inflater = LayoutInflater.from(ctx); 
         arg3 = inflater.inflate(R.layout.child, null); 
        } 
    
        String childData = children[arg0][arg1]; 
        TextView name = (TextView)arg3.findViewById(R.id.child_row_forum_title); 
        TextView desc = (TextView)arg3.findViewById(R.id.child_row_forum_description); 
    
        if (name != null) 
         name.setText(childData); 
    
        if (desc != null) 
         // desc.setText(currentSubForum.getDescription()); 
    
        arg3.setFocusableInTouchMode(true); 
        return arg3;} 
    
    public int getChildrenCount(int arg0) { 
        // TODO Auto-generated method stub 
        return children[arg0].length; 
    } 
    
    public Object getGroup(int arg0) { 
        // TODO Auto-generated method stub 
        return groups[arg0]; 
    } 
    
    public int getGroupCount() { 
        // TODO Auto-generated method stub 
        return groups.length; 
    } 
    
    public long getGroupId(int arg0) { 
        // TODO Auto-generated method stub 
        return arg0; 
    } 
    
    public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) { 
        if (arg2 == null) 
        { 
         LayoutInflater inflater = LayoutInflater.from(ctx); 
         arg2 = inflater.inflate(R.layout.group, null); 
        } 
    
    
        TextView name = (TextView) arg2.findViewById(R.id.group_item_forum_title); 
        //ImageView image = (ImageView) arg2.findViewById(R.id.group_item_expander_image); 
    
        if(name != null) 
         name.setText(groups[arg0]);   
    
        /* 
        if(image != null) { 
         int[][] group_state_sets = {{}, {android.R.attr.state_expanded}}; 
         image.setVisibility(View.VISIBLE); 
         int stateSetIndex = (isExpanded ? 1 : 0) ; 
         Drawable drawable = image.getDrawable(); 
         drawable.setState(group_state_sets[stateSetIndex]); 
        } 
        */ 
    
        return arg2;} 
    
    public boolean hasStableIds() { 
        // TODO Auto-generated method stub 
        return false; 
    } 
    
    public boolean isChildSelectable(int arg0, int arg1) { 
        // TODO Auto-generated method stub 
        return false; 
    } 
        } 
    
         } 
    
    3

    Özel grup düzeninizin "gerçek" olarak android:textIsSelectable="false" bulunmadığından emin olun, metin görünümündeki metin seçilebilir olarak ayarlanmışsa, genişletilebilir liste görünümü zencefilli çerezde genişler, ancak jellybean'da genişler ve ICS'de çalışmayabilir.

    1

    Benzer bir sorunla karşılaştım ve android:clickable="true" özelliğini xml'de ExpandableListView'dan kaldırarak çözüldü.

    0

    forumListView.collapseGroup (groupPosition);

    forumListView.collapseGroup olmalıdır (i);

    10

    Liste öğesinde Düğme gibi bir widget'ınız varsa, buna android:focusable="false" eklemeniz gerekebilir. Düğme, liste listemin tıklanmasına izin vermiyordu. Benim durumumdaki sorun buydu.

    +0

    Çok teşekkür ederim! –

    +0

    Bu bana yardımcı oldu. – Omolara

    +0

    Xml'de yaparsanız çalışmayabilir. Button.setFocusable (false) ekle; java'da. – Immy

    1

    bu zaten cevap verilmiştir biliyorum ama niteliği olması şişirme ne olursa olsun taban düzenini ayarlamayı deneyin:

    android:descendantFocusability="blocksDescendants" 
    
    İlgili konular