ExpandableListView的替代方法

时间:2019-01-20 07:59:49

标签: android expandablelistview

我正在设计一个包含部分可扩展组和部分通用表单元素的表单。当我们取消折叠该组时,将显示一个单独的表单。

我尝试使用ExpandableListView,但是需要创建的文件过多。我们有四个标签,每个标签都有自己的可扩展列表。有什么替代方法可以解决这个问题?

我期望的视图如下所示:(当然,我们有四个选项卡,每个选项卡都应具有此视图)。

Mockup

1 个答案:

答案 0 :(得分:0)

这就是我解决问题的方式。您必须更改静态值。我希望它能起作用。

 @Override
        public void onClick(View view) {
            ViewHolder holder = (ViewHolder) recyclerView.findViewHolderForAdapterPosition(selectedItem);
            if (holder != null) {
                holder.expandButton.setSelected(false);
                holder.expandableLayout.collapse();

            }

            int position = getAdapterPosition();


            //dynamic Listview Height calculate start
            float scale = view.getContext().getResources().getConfiguration().fontScale;

            int hh = 0;
            try {
                WindowManager wm = (WindowManager) view.getContext().getSystemService(Context.WINDOW_SERVICE);
                Display display = wm.getDefaultDisplay();
                int width = display.getWidth();  // deprecated
                int height = display.getHeight();  // deprecated


                View childView = listdetail.getAdapter().getView(0, null, listdetail);
                childView.measure(UNBOUNDED, UNBOUNDED);
                hh=childView.getMeasuredHeight();
            } catch (Exception e) {
                e.printStackTrace();
            }
            int scl = (int)(scale * (12f));
            scl = scl<=0?1:scl;
            ViewGroup.LayoutParams params = listdetail.getLayoutParams();
            if(hh<=0) {
                params.height = 10 * (listdetail.getAdapter().getCount()) * scl;
            }
            else {
                params.height = (int) (((scale<0f?1f:1f) *hh * (listdetail.getAdapter().getCount()))+10);
            }
            listdetail.setLayoutParams(params);

            //dynamic Listview Height calculate stop

            if (position == selectedItem) {
                selectedItem = UNSELECTED;
            } else {
                expandButton.setSelected(true);
                expandableLayout.expand();
                selectedItem = position;

            }
        }