Android ExpandableListView无法展开 [英] Android ExpandableListView not expanding

查看:274
本文介绍了Android ExpandableListView无法展开的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为城市制作可扩展的列表视图,但不会扩展.我有另外一个几乎完全像这样的人,但是这个人不会扩展,我花了很多时间试图找出问题所在,并且再也不能浪费了,有人可以指出这个问题吗?

I'm making an expandable list view for cities but it wont expand. I have another one almost exactly like this one but this one wont expand and I've spent a lot of time trying to see what's wrong and cant afford to waste any more can someone please point out the problem?

我还调用了expandGroup(0),但是它仍然没有扩展(好像没有什么可以扩展的.)

I also called expandGroup(0) but it still didnt't expanded (as if there is nothing to expand).

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

}

推荐答案

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

I know it's been sometime since this question and I hope this helps someone looking for an answer. When you have clickable widgets (like button, checkbox), set the following property for them:

android:focusable="false"

我猜测会发生什么,这些小部件会抢占焦点(尽管这仅在输入来自键盘等输入时才重要)并自动阻止隐式单击侦听器(例如组展开,折叠隐式发生而不会设置点击监听器.

I'm guessing what happens is that these widgets steal the focus (although this matters only if input is coming in from a keyboard or something like that) and automatically blocks the implicit click listeners (like group expand, collapse happen implicitly without setting a click listener).

如果您仍想维护窗口小部件的focusable属性,那么此时唯一的选择似乎是在适配器对象的getView()方法中找到单个元素,并设置一个明确的单击侦听器.

If you still want to maintain the focusable property for the widget, the only alternative at this time seems to be to find the individual element in the getView() method of the adapter object and set an explicit click listener.

这篇关于Android ExpandableListView无法展开的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆