首先是导入依赖
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
然后是布局
<android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> <RelativeLayout android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@android:color/white" android:gravity="center_vertical"> <CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="6dp" android:button="@drawable/select_checkbox" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="6dp" android:layout_toRightOf="@+id/checkbox" android:text="全选" android:textSize="20sp" /> </RelativeLayout>-----------------------------------------------------------------------------------------------------------------------
主页
public class MainActivity extends AppCompatActivity { private MyAdapter adapter; private RecyclerView mRv; private CheckBox mCheckbox; private RelativeLayout mRl; private RelativeLayout mLinear; private String url = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one"; /** * Hello World! */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //添加成布局,这个是listview的布局 mRv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)); //请求数据 x.http().get(new RequestParams(url), new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Bean bean = new Gson().fromJson(result, Bean.class); adapter = new MyAdapter(MainActivity.this,bean.getData()); mRv.setAdapter(adapter); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } private void initView() { mRv = (RecyclerView) findViewById(R.id.rv); mCheckbox = (CheckBox) findViewById(R.id.checkbox); mRl = (RelativeLayout) findViewById(R.id.rl); mCheckbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //判断点击状态 if (mCheckbox.isChecked()){ mCheckbox.setChecked(true); adapter.selectedAll(); }else{ mCheckbox.setChecked(false); adapter.cancleAll(); } } }); } //用来在适配器中调用更改状态 public void setCb(boolean bool) { mCheckbox.setChecked(bool); } }
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
然后是适配器
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<Bean.DataBean> list; private final MainActivity ac; public MyAdapter(Context context, List<Bean.DataBean> list) { this.context = context; this.list = list; ac = (MainActivity) context; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //找到条目布局 View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false); RecyclerView.ViewHolder holder = new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) { final Bean.DataBean dataBean = list.get(position); //找到控件 if (holder instanceof MyViewHolder) { ((MyViewHolder) holder).cb.setChecked(dataBean.isChecked()); ((MyViewHolder) holder).iv.setBackgroundResource(R.mipmap.ic_launcher); ((MyViewHolder) holder).tv.setText(dataBean.getTitle()); ((MyViewHolder) holder).cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //先判断是否选中 Bean.DataBean currentDataBean = list.get(position); boolean currentChecked = currentDataBean.isChecked(); currentDataBean.setChecked(!currentChecked); notifyDataSetChanged(); if (((MyViewHolder) holder).cb.isChecked()) { //去判断其它按钮是否都选中 ac.setCb(isAllChecked()); } else { //如果点击的按钮取消掉,即未选中状态,则去判断全选按钮是否是选中状态,如果是则取消选中 ac.setCb(false); } } }); } } //用来判断点击状态 private boolean isAllChecked() { for (int i = 0; i < list.size(); i++) { Bean.DataBean dataBeans = list.get(i); if (!dataBeans.isChecked()) { return false; } } return true; } @Override public int getItemCount() { return list.size(); } //viewhodler优化类 private class MyViewHolder extends RecyclerView.ViewHolder { private CheckBox cb; private ImageView iv; private TextView tv; public MyViewHolder(View itemView) { super(itemView); cb = itemView.findViewById(R.id.checkbox); iv = itemView.findViewById(R.id.imageview); tv = itemView.findViewById(R.id.tv); } } //更改为全部选中 public void selectedAll() { for (int i = 0; i < list.size(); i++) { Bean.DataBean dataBean = list.get(i); dataBean.setChecked(true); } notifyDataSetChanged(); } //更改为全都未选中 public void cancleAll() { for (int i = 0; i < list.size(); i++) { Bean.DataBean dataBean = list.get(i); dataBean.setChecked(false); } notifyDataSetChanged(); } }
xutils请求数据需要写一个app类,然后在注册列表里注册
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG); } }
注册
<application android:name=".MyApp"