是否可以将可扩展列表视图用作具有多个 select 的微调器的下拉视图?
Is it possible to use an expandablelistview as a dropdownview for a spinner with multiple select?
我正在使用一个 Button 加上一个包含 ExpandableListView 的 AlertDialog。
还要在子行旁边放一个复选框,它对单个 select 工作正常,但不会等待多个 select。
当我用于多个 select 时,我必须在对话框外单击才能终止对话框。
好的,我正在回答我自己的问题,现在可以了。我只是使用检查而不是检查图像来显示是否选择了子类别。
步骤:
在 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();
}
});
创建一个警告对话框,设置按钮正下方的 x、y 位置。
WindowManager.LayoutParams wmlp = dialogFilter.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 10; //x position
wmlp.y = 100; //y position
为类别和子类别创建 类(模型)并添加数据。
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;
}
检查是否选中。
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;
}
最后在适配器中
@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 个声望 :(
我正在使用一个 Button 加上一个包含 ExpandableListView 的 AlertDialog。 还要在子行旁边放一个复选框,它对单个 select 工作正常,但不会等待多个 select。
当我用于多个 select 时,我必须在对话框外单击才能终止对话框。
好的,我正在回答我自己的问题,现在可以了。我只是使用检查而不是检查图像来显示是否选择了子类别。
步骤:
在 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(); } });
创建一个警告对话框,设置按钮正下方的 x、y 位置。
WindowManager.LayoutParams wmlp = dialogFilter.getWindow().getAttributes(); wmlp.gravity = Gravity.TOP | Gravity.LEFT; wmlp.x = 10; //x position wmlp.y = 100; //y position
为类别和子类别创建 类(模型)并添加数据。
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; }
检查是否选中。
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; }
最后在适配器中
@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 个声望 :(