//主頁
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import java.util.ArrayList;
import de.greenrobot.event.EventBus;
import de.greenrobot.event.Subscribe;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ArrayList<bean> list = new ArrayList<>();
private RecyclerView mRe;
private int sum = 0;
private CheckBox mAllcheck;
private int i = 0;
/**
* 總計:
*/
private TextView mTv;
/**
* 付款
*/
private Button mBt;
private MyAdapter adapter;
/**
* 反選
*/
private Button mFx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this);
addDate();
initView();
}
public void addDate() {
for (int i = 0; i < 10; i++) {
bean bean1 = new bean("商品" + i, (i + 1), false);
list.add(bean1);
}
}
private void initView() {
mRe = (RecyclerView) findViewById(R.id.re);
mAllcheck = (CheckBox) findViewById(R.id.allcheck);
mAllcheck.setOnClickListener(this);
mTv = (TextView) findViewById(R.id.tv);
mBt = (Button) findViewById(R.id.bt);
mBt.setOnClickListener(this);
mRe.setLayoutManager(new LinearLayoutManager(this));
mRe.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
adapter = new MyAdapter(MainActivity.this, list);
mRe.setAdapter(adapter);
mFx = (Button) findViewById(R.id.fx);
mFx.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.allcheck:
boolean checked = mAllcheck.isChecked();
sum = 0;
adapter.updateCheck(checked);
break;
case R.id.bt:
break;
case R.id.fx:
adapter.fx();
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe
public void all(CheckEvent msg) {
mAllcheck.setChecked(msg.isCheck());
}
@Subscribe
public void num(NumEvent numEvent) {
i = numEvent.getNum();
if (i >= 0) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mBt.setText("結算" + i);
}
});
}
}
@Subscribe
public void money(PriceEvent priceEvent) {
sum += priceEvent.getEvprice();
if(sum>=0){
mTv.setText("總計:" + sum);
}else{
sum=0;
mTv.setText("總計:" + sum);
}
}
}
//MyAdapter
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
import java.util.ArrayList;
import de.greenrobot.event.EventBus;
/**
* Created by dy on 2017/10/19.
*/
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
private Context context;
private ArrayList<bean> list;
private int i=0;
private boolean zf=true;
public MyAdapter(Context context, ArrayList<bean> list) {
this.context = context;
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ViewHolder holder1= (ViewHolder) holder;
final bean bean = list.get(position);
holder1.tv1.setText(bean.getName());
holder1.tv2.setText(bean.getPrice()+"元");
holder1.checkBox.setChecked(bean.isChecked());
holder1.checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean checked = holder1.checkBox.isChecked();
bean.setChecked(checked);
if(checked){
i++;
if(select()){
Log.i("TAG","true");
CheckEvent checkEvent = new CheckEvent();
checkEvent.setCheck(true);
EventBus.getDefault().post(checkEvent);
NumEvent numEvent = new NumEvent();
numEvent.setNum(i);
EventBus.getDefault().post(numEvent);
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(bean.getPrice());
EventBus.getDefault().post(priceEvent);
}else{
Log.i("TAG","false");
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(bean.getPrice());
EventBus.getDefault().post(priceEvent);
NumEvent numEvent = new NumEvent();
numEvent.setNum(i);
EventBus.getDefault().post(numEvent);
}
}else {
Log.i("TAG","false2");
i--;
CheckEvent checkEvent = new CheckEvent();
checkEvent.setCheck(false);
EventBus.getDefault().post(checkEvent);
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(-bean.getPrice());
EventBus.getDefault().post(priceEvent);
NumEvent numEvent = new NumEvent();
numEvent.setNum(i);
EventBus.getDefault().post(numEvent);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
private final TextView tv1;
private final TextView tv2;
private final CheckBox checkBox;
public ViewHolder(View itemView) {
super(itemView);
tv1 = itemView.findViewById(R.id.item_tv);
tv2 = itemView.findViewById(R.id.item_tv2);
checkBox = itemView.findViewById(R.id.item_check);
}
}
public boolean select(){
for (bean b:list) {
if(!b.isChecked()){
return false;
}
}
return true;
}
public void updateCheck(boolean bool){
for (bean b:list) {
b.setChecked(bool);
if(bool){
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(b.getPrice());
EventBus.getDefault().post(priceEvent);
NumEvent numEvent = new NumEvent();
i=list.size();
numEvent.setNum(i);
EventBus.getDefault().post(numEvent);
}else {
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(0);
EventBus.getDefault().post(priceEvent);
NumEvent numEvent = new NumEvent();
i=0;
numEvent.setNum(i);
EventBus.getDefault().post(numEvent);
}
}
notifyDataSetChanged();
}
public void fx(){
for (bean b:list) {
if(b.isChecked()){
b.setChecked(false);
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(-b.getPrice());
EventBus.getDefault().post(priceEvent);
}else {
b.setChecked(true);
PriceEvent priceEvent = new PriceEvent();
priceEvent.setEvprice(b.getPrice());
EventBus.getDefault().post(priceEvent);
}
}
NumEvent numEvent = new NumEvent();
i=10-i;
numEvent.setNum(i);
EventBus.getDefault().post(numEvent);
if(select()){
CheckEvent checkEvent = new CheckEvent();
checkEvent.setCheck(true);
EventBus.getDefault().post(checkEvent);
}else{
CheckEvent checkEvent = new CheckEvent();
checkEvent.setCheck(false);
EventBus.getDefault().post(checkEvent);
}
notifyDataSetChanged();
}
}
//Eventbus
public class CheckEvent {
private boolean check;
public boolean isCheck() {
return check;
}
public void setCheck(boolean check) {
this.check = check;
}
}