首先来看下主布局:
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
android:orientation="vertical" | |
tools:context="com.example.asus.rikao04.MainActivity"> | |
<LinearLayout | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:orientation="horizontal" | |
android:padding="10sp"> | |
<Button | |
android:id="@+id/button_quan" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="全选" | |
android:padding="10sp"/> | |
<Button | |
android:id="@+id/button_fan" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="返选" | |
android:padding="10sp"/> | |
</LinearLayout> | |
<android.support.v7.widget.RecyclerView | |
android:id="@+id/recyclerview" | |
android:layout_width="match_parent" | |
android:layout_height="0dp" | |
android:layout_weight="1" | |
/> | |
<Button | |
android:id="@+id/button_conut" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="数量:"/> | |
</LinearLayout> |
<?xml version="1.0" encoding="utf-8"?> | |
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
android:layout_width="match_parent" | |
android:layout_height="50dp" | |
android:padding="10sp" | |
android:gravity="center_vertical" | |
android:orientation="horizontal"> | |
<CheckBox | |
android:id="@+id/checkbox" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" /> | |
<TextView | |
android:id="@+id/name" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="明知是意外"/> | |
</LinearLayout> |
public class MainActivity extends AppCompatActivity { | |
@BindView(R.id.button_quan) | |
Button buttonQuan; | |
@BindView(R.id.button_fan) | |
Button buttonFan; | |
@BindView(R.id.recyclerview) | |
RecyclerView recyclerview; | |
@BindView(R.id.button_conut) | |
Button tv_show;// 用于显示选中的条目数量 | |
private int checkNum; // 记录选中的条目数量 | |
private List<String> mlist = new ArrayList<>(); | |
private Myadapter myadapter; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
ButterKnife.bind(this); | |
initview(); | |
} | |
//这里是模拟添加数据 | |
private void initview() { | |
for (int i = 0; i < 30; i++) { | |
mlist.add("商品" + i); | |
} | |
recyclerview.setLayoutManager(new LinearLayoutManager(this)); | |
myadapter = new Myadapter(this, mlist); | |
recyclerview.setAdapter(myadapter); | |
buttonQuan.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
// 遍历list的长度,将MyAdapter中的map值全部设为true | |
for (int i = 0; i < mlist.size(); i++) { | |
getIsSelected().put(i, true); | |
} | |
// 数量设为list的长度 | |
checkNum = mlist.size(); | |
// 刷新listview和TextView的显示 | |
dataChanged(); | |
} | |
}); | |
// 反选按钮的回调接口 | |
buttonFan.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
// 遍历list的长度,将已选的设为未选,未选的设为已选 | |
for (int i = 0; i < mlist.size(); i++) { | |
if (getIsSelected().get(i)) { | |
Myadapter.getIsSelected().put(i, false); | |
checkNum--; | |
} else { | |
Myadapter.getIsSelected().put(i, true); | |
checkNum++; | |
} | |
} | |
// 刷新listview和TextView的显示 | |
dataChanged(); | |
} | |
}); | |
myadapter.setFindSelectBox(new Myadapter.FindSelectBox() { | |
@Override | |
public void findBox(int count) { | |
tv_show.setText("已选中" + count + "项"); | |
} | |
}); | |
} | |
private void dataChanged() { | |
myadapter.notifyDataSetChanged(); | |
// TextView显示最新的选中数目 | |
tv_show.setText("已选中" + checkNum + "项"); | |
} | |
} |
public class MainActivity extends AppCompatActivity { | |
@BindView(R.id.button_quan) | |
Button buttonQuan; | |
@BindView(R.id.button_fan) | |
Button buttonFan; | |
@BindView(R.id.recyclerview) | |
RecyclerView recyclerview; | |
@BindView(R.id.button_conut) | |
Button tv_show;// 用于显示选中的条目数量 | |
private int checkNum; // 记录选中的条目数量 | |
private List<String> mlist = new ArrayList<>(); | |
private Myadapter myadapter; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
ButterKnife.bind(this); | |
initview(); | |
} | |
private void initview() { | |
for (int i = 0; i < 30; i++) { | |
mlist.add("商品" + i); | |
} | |
recyclerview.setLayoutManager(new LinearLayoutManager(this)); | |
myadapter = new Myadapter(this, mlist); | |
recyclerview.setAdapter(myadapter); | |
buttonQuan.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
// 遍历list的长度,将MyAdapter中的map值全部设为true | |
for (int i = 0; i < mlist.size(); i++) { | |
getIsSelected().put(i, true); | |
} | |
// 数量设为list的长度 | |
checkNum = mlist.size(); | |
// 刷新listview和TextView的显示 | |
dataChanged(); | |
} | |
}); | |
// 反选按钮的回调接口 | |
buttonFan.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
// 遍历list的长度,将已选的设为未选,未选的设为已选 | |
for (int i = 0; i < mlist.size(); i++) { | |
if (getIsSelected().get(i)) { | |
Myadapter.getIsSelected().put(i, false); | |
checkNum--; | |
} else { | |
Myadapter.getIsSelected().put(i, true); | |
checkNum++; | |
} | |
} | |
// 刷新listview和TextView的显示 | |
dataChanged(); | |
} | |
}); | |
myadapter.setFindSelectBox(new Myadapter.FindSelectBox() { | |
@Override | |
public void findBox(int count) { | |
tv_show.setText("已选中" + count + "项"); | |
} | |
}); | |
} | |
private void dataChanged() { | |
myadapter.notifyDataSetChanged(); | |
// TextView显示最新的选中数目 | |
tv_show.setText("已选中" + checkNum + "项"); | |
} | |
} |
public class Myadapter extends RecyclerView.Adapter<Myadapter.ViewHolder> { | |
private List<String> mlist; | |
private Context context; | |
private Button buttonConut; | |
// 用来控制CheckBox的选中状况 | |
private static HashMap<Integer,Boolean> isSelected; | |
public Myadapter(Context context, List<String> mlist) { | |
this.mlist = mlist; | |
this.context = context; | |
isSelected = new HashMap<Integer, Boolean>(); | |
// 初始化数据 | |
initDate(); | |
} | |
private void initDate() { | |
for(int i=0; i<mlist.size();i++) { | |
getIsSelected().put(i,false); | |
} | |
} | |
public static HashMap<Integer,Boolean> getIsSelected() { | |
return isSelected; | |
} | |
@Override | |
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { | |
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false); | |
ViewHolder viewHolder = new ViewHolder(view); | |
return viewHolder; | |
} | |
@Override | |
public void onBindViewHolder(final ViewHolder holder, final int position) { | |
holder.name.setText(mlist.get(position)); | |
holder.itemView.setTag(position); | |
// 根据isSelected来设置checkbox的选中状况 | |
holder.checkbox.setChecked(getIsSelected().get(position)); | |
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { | |
@Override | |
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { | |
int pos = holder.getLayoutPosition(); | |
isSelected.put(pos, isChecked); | |
int count = 0; | |
for (int i = 0; i < isSelected.size(); i++) { | |
if(isSelected.get(i).booleanValue()){ | |
count++; | |
} | |
} | |
findSelectBox.findBox(count); | |
} | |
}); | |
} | |
public interface FindSelectBox{ | |
void findBox(int count); | |
} | |
private FindSelectBox findSelectBox; | |
public void setFindSelectBox(FindSelectBox findSelectBox){ | |
this.findSelectBox = findSelectBox; | |
} | |
@Override | |
public int getItemCount() { | |
return mlist == null ? 0 : mlist.size(); | |
} | |
public interface setonItemClick{ | |
void onItemclick(View view,int position); | |
} | |
setonItemClick setonItemClick; | |
public void setSetonItemClick(Myadapter.setonItemClick setonItemClick) { | |
this.setonItemClick = setonItemClick; | |
} | |
public class ViewHolder extends RecyclerView.ViewHolder { | |
@BindView(R.id.checkbox) | |
public CheckBox checkbox; | |
@BindView(R.id.name) | |
TextView name; | |
public ViewHolder(View itemView) { | |
super(itemView); | |
ButterKnife.bind(this, itemView); | |
} | |
} | |
} |
public class MainActivity extends AppCompatActivity { | |
@BindView(R.id.button_quan) | |
Button buttonQuan; | |
@BindView(R.id.button_fan) | |
Button buttonFan; | |
@BindView(R.id.recyclerview) | |
RecyclerView recyclerview; | |
@BindView(R.id.button_conut) | |
Button tv_show;// 用于显示选中的条目数量 | |
private int checkNum; // 记录选中的条目数量 | |
private List<String> mlist = new ArrayList<>(); | |
private Myadapter myadapter; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
ButterKnife.bind(this); | |
initview(); | |
} | |
private void initview() { | |
for (int i = 0; i < 30; i++) { | |
mlist.add("商品" + i); | |
} | |
recyclerview.setLayoutManager(new LinearLayoutManager(this)); | |
myadapter = new Myadapter(this, mlist); | |
recyclerview.setAdapter(myadapter); | |
buttonQuan.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
// 遍历list的长度,将MyAdapter中的map值全部设为true | |
for (int i = 0; i < mlist.size(); i++) { | |
getIsSelected().put(i, true); | |
} | |
// 数量设为list的长度 | |
checkNum = mlist.size(); | |
// 刷新listview和TextView的显示 | |
dataChanged(); | |
} | |
}); | |
// 反选按钮的回调接口 | |
buttonFan.setOnClickListener(new View.OnClickListener() { | |
@Override | |
public void onClick(View v) { | |
// 遍历list的长度,将已选的设为未选,未选的设为已选 | |
for (int i = 0; i < mlist.size(); i++) { | |
if (getIsSelected().get(i)) { | |
Myadapter.getIsSelected().put(i, false); | |
checkNum--; | |
} else { | |
Myadapter.getIsSelected().put(i, true); | |
checkNum++; | |
} | |
} | |
// 刷新listview和TextView的显示 | |
dataChanged(); | |
} | |
}); | |
myadapter.setFindSelectBox(new Myadapter.FindSelectBox() { | |
@Override | |
public void findBox(int count) { | |
tv_show.setText("已选中" + count + "项"); | |
} | |
}); | |
} | |
private void dataChanged() { | |
myadapter.notifyDataSetChanged(); | |
// TextView显示最新的选中数目 | |
tv_show.setText("已选中" + checkNum + "项"); | |
} | |
} |