【问题标题】:How to implement multilevel expandable listView for following Layout, or any other way to acheive this?如何为以下布局实现多级可扩展列表视图,或任何其他方式来实现这一点?
【发布时间】:2016-07-04 06:14:45
【问题描述】:

我正在尝试实现如下视图:

Group_1 subGroup_1 -> 网络调用,填充数据。 (onClick 事件另一个列表打开)(ListView) -> 网络调用,填充数据(ListView) subGroup_2 -> 网络调用,填充数据。 (onClick 事件另一个列表打开) -> 网络调用,填充数据

SubGroup_1 和 SubGroup_2 是硬编码的。 Onclick 的 SubGroup_1 进行网络调用并填充一个列表说 List_dataset_1,然后 再次对 List_dataset_1 的 onClick 事件进行另一个网络调用并填充另一个列表视图。

我尝试使用可扩展的 ListView,但没有成功。请建议我一种实现此类视图的方法,或者可以使用可扩展列表视图来实现此结果吗?

【问题讨论】:

  • 你能发布图表/图/图像吗,你可能会实现什么视图?
  • @Sam 我已添加图片

标签: android android-layout listview expandablelistview


【解决方案1】:

我明白了你的问题。我只是给你一个关于如何实现上述场景的想法。以下代码只是演示。你必须实现你自己的。见以下代码:

这是 GroupExpandableAdapter:

public class GroupExpandableAdapter extends BaseExpandableListAdapter
    {
        private ArrayList<Group> mGroupList;
        private Context mContext;
        private LayoutInflater inflater;
        private SubGroupExpandableAdapter mSubGroupExpandableAdapter;


        public GroupExpandableAdapter(Context context, ArrayList<Group> groupList) 
        {
            this.mGroupList = groupList;
            this.mContext = context;
        }

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

        @Override
        public int getChildrenCount(int groupPosition) 
        {
            return 1;           // for child expandable list view
        }

        @Override
        public Object getGroup(int groupPosition) 
        {

            return mGroupList.get(groupPosition);
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) 
        {
            return null;
        }

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

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

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

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
        {

            // implement your groupView code that you want to show
            return null;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,  boolean isLastChild, View convertView, ViewGroup parent) 
        {
            ChildHolder childHolder;
            if (convertView == null) 
            {
                inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.your_sub_group_expandable_view, null);

                childHolder = new ChildHolder();
                childHolder.subGroupExpandableListView = (ExpandableListView) convertView.findViewById(R.id.sub_group_expandable_view);

                convertView.setTag(childHolder);
            }
            else
            {
                childHolder = (ChildHolder) convertView.getTag();
            }

            initializeSubGroupAdapter(groupPosition);
            childHolder.subGroupExpandableListView.setAdapter(mSubGroupExpandableAdapter)
            return convertView;
        }


        private void initializeSubGroupAdapter(int groupPosition) 
        {
            mSubGroupExpandableAdapter = new SubGroupExpandableAdapter(mContext, mGroupList.get(groupPosition))
        }


        private static class ChildHolder
        {
            ExpandableListView subGroupExpandableListView;
        }


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

    }

以下代码适用于您的子组:

 public class SubGroupExpandableAdapter extends BaseExpandableListAdapter
    {
        private ArrayList<SubGroup> mSubGroupList;
        private Context mContext;
        private Group mGroup;

        public SubGroupExpandableAdapter(Context context, Group group) 
        {
            this.mContext = context;
            this.mGroup = group;
            this.mSubGroupList = group.getSubGroupList();
        }

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

        @Override
        public int getChildrenCount(int groupPosition) 
        {
            return mSubGroupList.get(groupPosition).getItemOfSubGroup().size();
        }

        @Override
        public Object getGroup(int groupPosition) 
        {
            return mSubGroupList.get(groupPosition);
        }

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return mSubGroupList.get(groupPosition).getItemOfSubGroup().get(childPosition);
        }

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

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

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

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
        {
            // Implement your subGroup view here
            return null;
        }

        @Override
        public View getChildView(int groupPosition, int childPosition,  boolean isLastChild, View convertView, ViewGroup parent) 
        {
            // Implement itemOfSubGroup view here
            return null;
        }

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

    }

这是你的 MainActivity,你必须从这里传递模型数据:

public class MainActivity extends Activity 
{

    private ExpandableListView mGroupExpandableListView;
    private GroupExpandableAdapter mGroupExpandableAdapter;
    private ArrayList<Group> mGroupList;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }


    private void initView() 
    {
        mGroupList = new ArrayList<Group>(); // fill your modeldata from server
        mGroupExpandableListView = (ExpandableListView) findViewById(R.id.groupExpandableListView);

        initializeAdapter();
    }

    private void initializeAdapter() 
    {
        mGroupExpandableAdapter = new GroupExpandableAdapter(MainActivity.this, groupList)
        mGroupExpandableListView.setAdapter(mGroupExpandableAdapter);
    }
}

希望对你有帮助。

【讨论】:

  • 我想发送从第一个 API 调用获得的数据以进行第二个 API 调用。我想在点击监听器上执行此操作。
  • 您可以将onGroupClickListener 用于ExpandableListView 组的onClick。浏览this 文档,这可能会对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2014-08-06
相关资源
最近更新 更多