是否可以将可扩展列表视图用作具有多个 select 的微调器的下拉视图?

Is it possible to use an expandablelistview as a dropdownview for a spinner with multiple select?

我正在使用一个 Button 加上一个包含 ExpandableListView 的 AlertDialog。 还要在子行旁边放一个复选框,它对单个 select 工作正常,但不会等待多个 select。

当我用于多个 select 时,我必须在对话框外单击才能终止对话框。

好的,我正在回答我自己的问题,现在可以了。我只是使用检查而不是检查图像来显示是否选择了子类别。

步骤:

  1. 在 toolbar/actionbar 上创建一个按钮,使 UI 像微调器一样。

    Button btn_filter = (Button)layoutView.findViewById(R.id.filters);
    btn_filter.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            dialogFilter.show();
        }
    });
    
  2. 创建一个警告对话框,设置按钮正下方的 x、y 位置。

    WindowManager.LayoutParams wmlp = dialogFilter.getWindow().getAttributes();
    wmlp.gravity = Gravity.TOP | Gravity.LEFT;
    wmlp.x = 10;   //x position
    wmlp.y = 100;   //y position
    
  3. 为类别和子类别创建 类(模型)并添加数据。

    public class FilterCategory {
        public String category_name = null;
        public ArrayList<SubCategory> subcategory_array = new  ArrayList<SubCategory>();
    }
    public class SubCategory {
         public String subcategory_name = null;
         public boolean selected = false;
    }
    
  4. 检查是否选中。

       if(category_array.get(groupPosition).subcategory_array.get(childPosition).selected) {
                category_array.get(groupPosition).subcategory_array.get(childPosition).selected = false;
            } else {
                category_array.get(groupPosition).subcategory_array.get(childPosition).selected = true;
            }
    
  5. 最后在适配器中

     @Override
     public View getGroupView(int groupPosition, boolean arg1, View view, ViewGroup parent) {
      GroupHolder groupHolder;
    
      if (view == null) {
       view = LayoutInflater.from(mContext).inflate(R.layout.group_row,null);
       groupHolder = new GroupHolder();
       groupHolder.img = (ImageView) view.findViewById(R.id.tab_img);
       groupHolder.title = (TextView) view.findViewById(R.id.group_name);
       view.setTag(groupHolder);
      } else {
       groupHolder = (GroupHolder) view.getTag();
      }
      groupHolder.title.setText(mGroupCollection.get(groupPosition).category_name);
      if(arg1){
           groupHolder.img.setImageResource(R.drawable.dropdown_small_arrow_converted);
       }else{
           groupHolder.img.setImageResource(R.drawable.right_small_arrow_converted);
       }
        return view;
     }
    
     @Override
     public View getChildView(final int groupPosition, final int childPosition, boolean arg2, View convertView,ViewGroup parent)
     {
        final ChildHolder childHolder;
      if (convertView == null) {
       convertView = LayoutInflater.from(mContext).inflate(R.layout.child_row, null);
       childHolder = new ChildHolder();
       childHolder.checkBox = (ImageView)convertView.findViewById(R.id.checkbox);
       childHolder.name=(TextView)convertView.findViewById(R.id.childname);
       convertView.setTag(childHolder);
      } else {
       childHolder = (ChildHolder) convertView.getTag();
      }
      childHolder.name.setText(mGroupCollection.get(groupPosition).subcategory_array.get(childPosition).subcategory_name);
    
      if(mGroupCollection.get(groupPosition).subcategory_array.get(childPosition).selected) {
       childHolder.checkBox.setVisibility(View.VISIBLE);
      } else {
       childHolder.checkBox.setVisibility(View.GONE);
      }
    
      return convertView;
     }
    

截图:

抱歉,我无法 post 截图,因为 post 图片至少需要 10 个声望 :(