版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lamphogani/article/details/77933575
效果
代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rl_spinner_up"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorWhite">
<TextView
android:id="@+id/tv_spinner_multi"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:gravity="center"
android:text=""
android:textAllCaps="false"
android:textColor="@color/colorTv" />
<CheckBox
android:id="@+id/cb_spinner_multi"
android:layout_width="13dp"
android:layout_height="9dp"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"
android:layout_toRightOf="@id/tv_spinner_multi"
android:background="@drawable/selector_item_type"
android:button="@null"
android:checked="true"
android:clickable="false"
android:focusable="false"
android:gravity="center" />
</RelativeLayout>
public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<String> mList;
//用来控制CheckBox的选中状况
private static HashMap<Integer, Boolean> isSelected;
public MyAdapter(Context context, List<String> list, HashMap<Integer, Boolean> isSelected) {
this.mList = list;
this.mContext = context;
this.isSelected = isSelected;
initData();
}
//初始化isSelected的数据
private void initData() {
for (int i = 0; i < mList.size(); i++) {
getIsSelected().put(i, false);
}
}
private void initDataTrue() {
for (int i = 0; i < mList.size(); i++) {
getIsSelected().put(i, true);
}
}
public void updata(HashMap<Integer, Boolean> isSelectedTrue) {
for (int i = 0; i < isSelectedTrue.size(); i++) {
this.isSelected.put(i, isSelectedTrue.get(i));
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
String bean = mList.get(position);
LayoutInflater inflater = LayoutInflater.from(mContext);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_layout, parent, false);
holder = new ViewHolder();
holder.tv_spinner_multi = convertView.findViewById(R.id.tv_spinner_multi);
holder.cb_spinner_multi = convertView.findViewById(R.id.cb_spinner_multi);
holder.rl_spinner_up = convertView.findViewById(R.id.rl_spinner_up);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv_spinner_multi.setText(bean);
//监听checkBox并根据原来的状态来设置新的状态
holder.rl_spinner_up.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (isSelected.get(position)) {
if (position == 0) {
initData();//如果是0位置,就将所有的都设置成不选中
} else {
isSelected.put(0, false);//有一个非0位置的不选中的时候,0位置的就不会被选中
isSelected.put(position, false);
setIsSelected(isSelected);
}
} else {
if (position == 0) {
initDataTrue();//如果是0位置,就将所有的都设置成选中
} else {
//非0位置的时候,判断其他的子项是否已经选中
int count = 0;
for (int i = 0; i < getIsSelected().size(); i++) {
if (i != 0 && i != position && getIsSelected().get(i)) {
count++;
}
}
if (count == mList.size() - 2) {
isSelected.put(0, true);
}
isSelected.put(position, true);
setIsSelected(isSelected);
}
}
notifyDataSetChanged();
}
});
//根据选中情况设置字体颜色
if (isSelected.get(position)) {
holder.tv_spinner_multi.setTextColor(mContext.getResources().getColor(R.color.colorAccent));
} else {
holder.tv_spinner_multi.setTextColor(mContext.getResources().getColor(R.color.colorTv));
}
// 根据isSelected来设置checkbox的选中状况
holder.cb_spinner_multi.setChecked(getIsSelected().get(position));
return convertView;
}
public static HashMap<Integer, Boolean> getIsSelected() {
return isSelected;
}
public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {
MyAdapter.isSelected = isSelected;
}
private static class ViewHolder {
private TextView tv_spinner_multi;
private CheckBox cb_spinner_multi;
private RelativeLayout rl_spinner_up;
}
}
private String area[] = {"全部", "北京", "上海", "广州", "深圳", "郑州", "南京"};
private HashMap<Integer, Boolean> isSelectedArea = new HashMap<Integer, Boolean>();
private HashMap<Integer, Boolean> isSelectedAreaTrue = new HashMap<Integer, Boolean>();
listview = (ListView) findViewById(R.id.listview);
myAdapter = new MyAdapter(this, Arrays.asList(area), isSelectedArea);
listview.setAdapter(myAdapter);
initData();
//初始化isSelectedTrue的数据
private void initData() {
for (int i = 0; i < area.length; i++) {
isSelectedAreaTrue.put(i, false);
}
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv_show:
if (listview.getVisibility() == View.VISIBLE) {
listview.setVisibility(View.GONE);
} else {
listview.setVisibility(View.VISIBLE);
}
break;
case R.id.btn_spinner_cancel_area:
listview.setVisibility(View.GONE);
myAdapter.updata(isSelectedAreaTrue);
break;
case R.id.btn_spinner_ok_area:
List<String> selectedListArea = new ArrayList<>();
listview.setVisibility(View.GONE);
isSelectedArea = myAdapter.getIsSelected();
for (int i = 0; i < isSelectedArea.size(); i++) {
isSelectedAreaTrue.put(i, isSelectedArea.get(i));
if (isSelectedArea.get(i).equals(true)) {
selectedListArea.add(area[i]);
}
}
break;
}
}