View
public class MainActivity extends AppCompatActivity implements SubAdapter.OnItemCheckedLisenter {
@BindView(R.id.cb_all)
CheckBox cbAll;
@BindView(R.id.tv_price)
TextView tvPrice;
@BindView(R.id.tv_count)
TextView tvCount;
@BindView(R.id.rv_container)
RecyclerView rvContainer;
private Context context;
private ArrayList<ItemBean.DataBean> data;
private SubAdapter subAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//获取上下文
context = this;
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
okHttpClient.newCall(new Request.Builder().url(Constant.URL).build()).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String responseInfo = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
ItemBean itemBean = gson.fromJson(responseInfo, ItemBean.class);
data = (ArrayList<ItemBean.DataBean>) itemBean.getData();
LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
rvContainer.setLayoutManager(manager);
//设置适配器
subAdapter = new SubAdapter(context, data);
rvContainer.setAdapter(subAdapter);
subAdapter.setOnItemCheckedLisenter(MainActivity.this);
}
});
}
});
}
@OnClick({R.id.cb_all, R.id.tv_price, R.id.tv_count})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.cb_all:
if (cbAll.isChecked()) {
//如果是选中状态,设置recyclerview中的子条目全部被选中
for (int i = 0; i < data.size(); i++) {
//对集合中的每个条目定义为被选中
data.get(i).setChecked(true);
}
//刷新适配器
subAdapter.notifyDataSetChanged();
} else {
//如果是未选中状态,设置recyclerview中的子条目全部不被选中
for (int i = 0; i < data.size(); i++) {
data.get(i).setChecked(false);
}
//刷新适配器
subAdapter.notifyDataSetChanged();
}
break;
case R.id.tv_price:
break;
case R.id.tv_count:
break;
}
}
@Override
public void onItemChecked(int position, boolean checked) {
//更新数据源
data.get(position).setChecked(checked);
boolean tag = true;
//遍历集合,查看是否有数据源未勾选
for (ItemBean.DataBean dataBean : data) {
if (dataBean.getChecked() == false) {
tag = false;
}
}
cbAll.setChecked(tag);
//适配器刷新
subAdapter.notifyDataSetChanged();
}
}
Adapter:
public class SubAdapter extends RecyclerView.Adapter<SubAdapter.SubViewHolder> {
Context context;
ArrayList<ItemBean.DataBean> data;
public SubAdapter(Context context, ArrayList<ItemBean.DataBean> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public SubViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
View rootView = LayoutInflater.from(context).inflate(R.layout.recyclerview_item, viewGroup, false);
SubViewHolder subViewHolder = new SubViewHolder(rootView);
return subViewHolder;
}
@Override
public void onBindViewHolder(@NonNull SubViewHolder subViewHolder, int position) {
//对图片的展示
String images = data.get(position).getList().get(0).getImages();
if (images != null && images.contains("|")) {
String[] imgsUrl = images.split("\\|");
Picasso.get().load(imgsUrl[0]).into(subViewHolder.iv_showIcon);
} else {
Picasso.get().load(images).into(subViewHolder.iv_showIcon);
}
//对文字的展示
subViewHolder.tv_showInfo.setText(data.get(position).getList().get(0).getTitle());
//获取数据源中的条目信息,做及时的更新
subViewHolder.cb_choose.setChecked(data.get(position).getChecked());
}
@Override
public int getItemCount() {
return data.size();
}
class SubViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private CheckBox cb_choose;
private ImageView iv_showIcon;
private TextView tv_showInfo;
public SubViewHolder(@NonNull View itemView) {
super(itemView);
cb_choose = itemView.findViewById(R.id.cb_choose);
iv_showIcon = itemView.findViewById(R.id.iv_showIcon);
tv_showInfo = itemView.findViewById(R.id.tv_showInfo);
cb_choose.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//把点击时的位置进行回传
int position = getLayoutPosition();
//可以把当前的条目的checkbox对应勾选状态进行返回
boolean checked = cb_choose.isChecked();
onItemCheckedLisenter.onItemChecked(position,checked);
}
}
public interface OnItemCheckedLisenter {
//用于反馈,recyclerview中的子条目是否选中,并且及时更新外部的勾选状态
void onItemChecked(int position, boolean checked);
}
OnItemCheckedLisenter onItemCheckedLisenter;
public void setOnItemCheckedLisenter(OnItemCheckedLisenter onItemCheckedLisenter) {
this.onItemCheckedLisenter = onItemCheckedLisenter;
}
}
加减器XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_height="wrap_content">
<Button
android:id="@+id/dele"
android:layout_width="40dp"
android:layout_height="40dp"
android:text="-"
/>
<TextView
android:id="@+id/nums"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:textSize="15dp"
/>
<Button
android:id="@+id/add"
android:layout_width="40dp"
android:layout_height="40dp"
android:text="+"
/>
</LinearLayout>
加减器自定义View:
public class AddAndDele extends LinearLayout {
private TextView nums;
public AddAndDele(Context context) {
super(context);
}
public interface UpdataNums{
void updata(int num);
}
private UpdataNums updataNums;
public void setUpdataNums(UpdataNums updataNums) {
this.updataNums = updataNums;
}
public AddAndDele(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public void setnums(int num){
nums.setText(num+"");
}
private void init(final Context context) {
View inflate = View.inflate(context, R.layout.addanddele, this);
Button add = inflate.findViewById(R.id.add);
nums = inflate.findViewById(R.id.nums);
Button dele = inflate.findViewById(R.id.dele);
add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String s = nums.getText().toString();
int num = new Integer(s);
num++;
nums.setText(num+"");
updataNums.updata(num);
}
});
dele.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String s = nums.getText().toString();
int num = new Integer(s);
if (num>1){
num--;
nums.setText(num+"");
updataNums.updata(num);
}else{
Toast.makeText(context,"商品数量不能小于1",Toast.LENGTH_LONG).show();
}
}
});
}
}
加减器dapter:
public class GouWuCheAdapter extends RecyclerView.Adapter<GouWuCheAdapter.MyHolder> {
Context context;
List<GouWuCheBean.DataBean> list;
private static final String TAG = "GouWuCheAdapter";
public GouWuCheAdapter(Context context, List<GouWuCheBean.DataBean> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.gouwuche_item, parent, false);
MyHolder myHolder = new MyHolder(inflate);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, final int position) {
//holder.item_jiage.setText((int) list.get(position).getList().get(position).getPrice());
Log.d(TAG, "onBindViewHolder: "+position);
holder.item_title.setText(list.get(position).getList().get(0).getTitle());
holder.nums_text.setnums((int) list.get(position).getList().get(0).getNum());
//加减器接口回调,将bean类数据修改
holder.nums_text.setUpdataNums(new AddAndDele.UpdataNums() {
@Override
public void updata(int num) {
list.get(position).getList().get(0).setNum(num);
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyHolder extends RecyclerView.ViewHolder {
//private final TextView item_jiage;
private final TextView item_title;
private final AddAndDele nums_text;
//private final ImageView item_images;
public MyHolder(View itemView) {
super(itemView);
//item_jiage = itemView.findViewById(R.id.item_jiage);
item_title = itemView.findViewById(R.id.item_title);
nums_text = itemView.findViewById(R.id.nums_text);
//item_images = itemView.findViewById(R.id.item_images);
}
}
}