48 votes

Android ExpandableListView - Vous cherchez un tutoriel

Je suis en train de programmer une interface Android qui utilise une liste extensible sur le côté et un fragment de l'autre côté afin que je puisse charger différentes ressources en cliquant sur les enfants de la liste déroulante. Mais malheureusement, je ne trouve pas les bons tutoriels sur cette liste, n'importe où. Oui j'ai regarder dans l'API démos et j'ai fait une liste normale avec un BaseExpandableListAdapter mais encore, la compréhension de ces liste eh bien, c'est un peu difficile sans un bon tutoriel, avez-vous une bonne ou autour d'infos que j'ai pu vérifier?

63voto

Dmytro Danylyk Points 6911

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
==============================
 

51voto

Never Quit Points 1416

vous pouvez trouver de travail exemple de la liste déroulante afficher par les liens suivants:

en cliquant 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...
    }
});

Espérons que cela vous aidera. Merci..

1voto

Kaushal Points 36

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X