web-dev-qa-db-ja.com

Android ExpandableListView-チュートリアルを探しています

私はAndroidインターフェイスをプログラムしようとしています。このインターフェイスは、拡張可能なリストの子をクリックして別のリソースをロードできるように、拡張可能なリストと反対側のフラグメントを使用します。はい、APIのデモを見て、BaseExpandableListAdapterを使用して通常のリストを作成しましたが、それでもこれらのリストをよく理解しているので、良いチュートリアルなしではちょっと大変です周りに良いものや確認できる情報はありますか?

48
DeX03

リンクを展開すると、展開可能なリストビューの実用的な例を見つけることができます。

子をクリックすると、この方法で処理できます。

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

これがお役に立てば幸いです。ありがとう。

51
Never Quit

アイテムリストの作成

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

データオブジェクト

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
}

アダプター

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

}

あなたに与える

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

この方法でイベントを処理できます:

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