web-dev-qa-db-fra.com

Android ExpandableListView - Vous cherchez un tutoriel

J'essaie de programmer une interface Android qui utilise une liste extensible du côté et un fragment de l'autre côté pour pouvoir charger différentes ressources en cliquant sur les enfants de la liste extensible. Mais Malheureusement, je ne trouve aucun bon tutoriel sur cette liste, où que ce soit. Oui, j’ai jeté un œil dans les démonstrations de l’API et j’ai fait une liste normale avec BaseExpandableListAdapter, mais je comprends tout de même bien que c'est très difficile sans un bon tutoriel. tout bon ou info que je pourrais vérifier?

48
DeX03

vous pouvez trouver un exemple de travail de la vue liste extensible en suivant les liens:

pour cliquer sur l'enfant, vous pouvez gérer de cette façon.

getExpandableListView().setOnChildClickListener(new OnChildClickListener() {                
    public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) { 
        // your code...
    }
});

J'espère que ceci vous aidera. Merci..

51
Never Quit

Créer une liste d'articles

List<ParentItem> itemList = new ArrayList<ParentItem>();

ParentItem parent1 = new ParentItem();
parent1.getChildItemList().add(new ChildItem());
parent1.getChildItemList().add(new ChildItem());
parent1.getChildItemList().add(new ChildItem());

ParentItem parent2 = new ParentItem();
parent2.getChildItemList().add(new ChildItem());
parent2.getChildItemList().add(new ChildItem());
parent2.getChildItemList().add(new ChildItem());

itemList.add(parent1);
itemList.add(parent2);

ExpandableListViewAdapter adapter = new ExpandableListViewAdapter(context, itemList); 

Objets de données

public class ParentItem {

        private List<ChildItem> childItemList;

        public ParentItem() {
                childItemList = new ArrayList<ChildItem>();
        }

        public List<ChildItem> getChildItemList() {
                return childItemList;
        }
}

public class ChildItem {
        // filll with your data
}

Adaptateur

public class ExpandableListViewAdapter extends BaseExpandableListAdapter {

        private static final class ViewHolder {
                TextView textLabel;
        }

        private final List<ParentItem> itemList;
        private final LayoutInflater inflater;

        public ExpandableListViewAdapter(Context context, List<ParentItem> itemList) {
                this.inflater = LayoutInflater.from(context);
                this.itemList = itemList;
        }

        @Override
        public ChildItem getChild(int groupPosition, int childPosition) {

                return itemList.get(groupPosition).getChildItemList().get(childPosition);
        }

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

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

        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
                                 final ViewGroup parent) {
                View resultView = convertView;
                ViewHolder holder;


                if (resultView == null) {

                        resultView = inflater.inflate(Android.R.layout.test_list_item, null); //TODO change layout id
                        holder = new ViewHolder();
                        holder.textLabel = (TextView) resultView.findViewById(Android.R.id.title); //TODO change view id
                        resultView.setTag(holder);
                } else {
                        holder = (ViewHolder) resultView.getTag();
                }

                final ChildItem item = getChild(groupPosition, childPosition);

                holder.textLabel.setText(item.toString());

                return resultView;
        }

        @Override
        public ParentItem getGroup(int groupPosition) {
                return itemList.get(groupPosition);
        }

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

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

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View theConvertView, ViewGroup parent) {
                View resultView = theConvertView;
                ViewHolder holder;

                if (resultView == null) {
                        resultView = inflater.inflate(Android.R.layout.test_list_item, null); //TODO change layout id
                        holder = new ViewHolder();
                        holder.textLabel = (TextView) resultView.findViewById(Android.R.id.title); //TODO change view id
                        resultView.setTag(holder);
                } else {
                        holder = (ViewHolder) resultView.getTag();
                }

                final ParentItem item = getGroup(groupPosition);

                holder.textLabel.setText(item.toString());

                return resultView;
        }

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

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

}

vous donne

==============================
+Parent 1
==============================
-child 1.1
==============================
-child 1.2
==============================
-child 1.3
==============================
+Parent 2
==============================
-child 2.1
==============================
-child 2.2
==============================
-child 2.3
==============================
62
Dmytro Danylyk

De cette façon, vous pouvez gérer des événements:

getExpandableListView().setOnChildClickListener(new OnChildClickListener() 
{               
    public boolean onChildClick(ExpandableListView parent, 
        View v, int groupPosition, int childPosition, long id) 
    { 
        // your code...
    }
}
1
Kaushal