【问题标题】:Android ExpandableListView not expandingAndroid ExpandableListView 不展开
【发布时间】:2013-08-23 11:21:41
【问题描述】:

我正在为城市制作可展开的列表视图,但它不会展开。我还有一个几乎和这个一模一样的,但是这个不会扩展,我花了很多时间试图找出问题所在,不能再浪费了,有人可以指出问题吗?

我也调用了 expandGroup(0),但它仍然没有展开(好像没有什么可以展开)。

XML

<ExpandableListView
                        android:id="@+id/judet"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="10dp"
                        android:choiceMode="singleChoice"
                        android:groupIndicator="@null"
                        android:smoothScrollbar="true" >
                    </ExpandableListView>

在我的主要课程中

final AdapterJudet adapterJudet = new AdapterJudet(getApplicationContext());
ExpandableListView judet = (ExpandableListView) findViewById(R.id.judet);
judet.setAdapter(adapterJudet);
judet.setOnChildClickListener(new OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {

                AdapterJudet.selected = AdapterJudet.judete[childPosition];
                judet.collapseGroup(0);
                return false;
            }
        });

适配器类

public class AdapterJudet extends BaseExpandableListAdapter {

    Context ctx;
    static String [] judete = {"Alba","Arad","Arges","Bacau","Bihor","Bistrita-Nasaud","Botosani","Brasov","Braila","Buzau","Caras-Severin","Cluj","Constanta","Covasna","Dambovita","Dolj","Galati","Giurgiu","Gorj","Hargita","Hunedoara","Ialomita","Maramures","Mehedinti","Mures","Neamt","Olt","Prahova","Satu-Mare","Salaj","Sibiu","Teleorman","Timis","Tulcea","Valcea","Vaslui","Vrancea","Bucuresti","Ilfov","Calarasi","Iasi","Suceava"};
    static String selected = "Judet";
    static int judetID = -1;

    public AdapterJudet (Context ctx){
        this.ctx = ctx;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = convertView;

        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.item_layout, parent, false);
        }

        TextView itemName = (TextView) v.findViewById(R.id.itemName);

        itemName.setText(judete[childPosition]);
        judetID = childPosition;
        return v;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        // TODO Auto-generated method stub
        return judete.length;
    }

    @Override
    public Object getGroup(int groupPosition) {
        // TODO Auto-generated method stub
        return groupPosition;
    }

    @Override
    public int getGroupCount() {
        // TODO Auto-generated method stub
        return 1;
    }

    @Override
    public long getGroupId(int groupPosition) {
        // TODO Auto-generated method stub
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = convertView;

        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.group_layout, parent, false);
        }

        TextView groupName = (TextView) v.findViewById(R.id.groupName);

        groupName.setText(selected);

        return v;
    }

    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return true;
    }

}

【问题讨论】:

  • 您的意思是您的展开式列表视图无法展开??
  • 什么都不做,但文本和布局都在那里
  • 那里有些代码我看不懂
  • 请参考this

标签: android expandablelistview


【解决方案1】:

我知道这个问题已经有一段时间了,我希望这对寻找答案的人有所帮助。当您有可点击的小部件(如按钮、复选框)时,为它们设置以下属性:

android:focusable="false"

我猜会发生什么是这些小部件窃取焦点(尽管这仅在输入来自键盘或类似的东西时才重要)并自动阻止隐式点击侦听器(如组展开,折叠隐式发生而没有设置点击监听器)。

如果你还想保持widget的focusable属性,此时唯一的选择似乎是在适配器对象的getView()方法中找到单个元素,并设置一个显式的点击监听器。

【讨论】:

    【解决方案2】:

    为我工作 android:descendantFocusability="blocksDescendants" 在父视图中添加上述行

    【讨论】:

    • ucsunil 的解决方案一直为我工作,直到最近更新了一个项目依赖项。现在这个解决方案是唯一适合我的解决方案。
    【解决方案3】:

    将它用于您的ExpandableListView

    list.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                    return  list.isGroupExpanded(groupPosition) ? list.collapseGroup(groupPosition) : list.expandGroup(groupPosition);
                }
            });
    

    【讨论】:

      【解决方案4】:

      我知道你问这个问题已经快一年了......

      我也遇到了同样的问题。检查您正在为组视图扩展的布局中是否有任何“可点击”小部件。我的组视图布局中有一个按钮,它没有将点击传递给组。删除按钮解决了我的问题。

      【讨论】:

      • 是的,我遇到了同样的问题,这是因为组视图中有一个按钮。现在我希望将按钮保留在组视图中,我需要做什么才能使其工作?
      • 谢谢你。我从布局中删除了按钮并在那里添加了 Textview。
      【解决方案5】:

      我记得几个月前遇到过类似的问题, 尝试改变

      android:layout_height="wrap_content"
      

      android:layout_height="match_parent"
      

      【讨论】:

      • 没有效果,但也许我应该说:它在滚动视图中,在不同布局中有更多元素,我在当前布局中包含了该布局。
      • 移动了但没有变化
      • 我创建了自定义 expandablelistview android:layout_height="wrap_content" android:layout_height="wrap_content" 但列表在展开时无法正常工作,我浪费了 1 天。感谢@AndroidParanoid。
      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多