效果图
和上一个不一样的是这个是用checkbox实现的
依赖
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.squareup.okio:okio:1.13.0'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.jakewharton:butterknife:8.8.1'
VIEW层
public interface IRecyView {
//两个方法展示和刷新recyclerview的
public void showRecycler();
public void showRefresh(List<MusicBean.SongListBean> listBean, List<CheakBean> list);
}
MODEL层
接口类
public interface IRecyclerModel {
//用来获得数据
public void showRecyclerData(Observer observer);
}
CLASS
//实现接口类,重写方法获得数据
public class RecyclerModel implements IRecyclerModel {
@Override
public void showRecyclerData(Observer observer) {
//添加拦截器
OkHttpClient clent=new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
//retrofit获得接口请求数据
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(Constant.*BASE_URL*)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(clent)
.build();
*UserUtil* userUtil=retrofit.create(UserUtil.class);
userUtil.getCall().observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(observer);
}
工具类
public class Constant {
public static final String BASE_URL="http://tingapi.ting.baidu.com/";
}
public interface UserUtil{
@GET("v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")
Observable<MusciBean> getCall();
}
public class Myapp extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
public class CheakBean {
boolean falg;
public CheakBean(boolean falg) {
this.falg = falg;
}
public boolean isFalg() {
return falg;
}
public void setFalg(boolean falg) {
this.falg = falg;
}
@Override
public String toString() {
return "CheakBean{" +
"falg=" + falg +
'}';
}
}
Presenter层
接口类
//实现绑定和解绑两个方法
public interface IRecyclerPresenter<T>{
public void attach(T view);
public void deatch();
}
class
//实现接口类重写方法,软引用防止内存泄漏
public class RecyclerPresenter implements IRecyclerPresenter<IRecyView>{
RecyclerModel model;
SoftReference<IRecyView> softview;
List<MusicBean.SongListBean> listBean=new ArrayList<>();
List<CheakBean> list=new ArrayList<>();
public RecyclerPresenter(IRecyView view) {
attach(view);
model=new RecyclerModel();
}
public void showData(){
model.showRecyclerData(new Observer<MusicBean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(MusicBean musicBean) {
listBean.addAll(musicBean.getSong_list());
Log.i("======",listBean.toString());
list.clear();
for(int i=0;i<listBean.size();i++){
list.add(new CheakBean(false));
}
softview.get().showRefresh(listBean,list);
}
});
}
@Override
public void attach(IRecyView view) {
softview=new SoftReference<IRecyView>(view);
}
@Override
public void deatch() {
softview.clear();
}
}
适配器
public class MyRecyclerAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder>{
Context context;
List<MusicBean.SongListBean> listBean;
List<CheakBean> list;
boolean flag;
boolean choose;
public MyRecyclerAdapter(Context context, List<MusicBean.SongListBean> listBean) {
this.context = context;
this.listBean = listBean;
}
//传入flag决定是否可见
public void setVisible(boolean flag){
this.flag=flag;
}
public void setRefresh(List<MusicBean.SongListBean> listBean, List<CheakBean> list){
this.listBean=listBean;
this.list=list;
notifyDataSetChanged();
}
@Override
public XRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(context, R.layout.recycler_item,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(XRecyclerView.ViewHolder holder, final int position) {
((MyViewHolder)holder).tv_title.setText(listBean.get(position).getAlbum_title());
((MyViewHolder)holder).tv_name.setText(listBean.get(position).getArtist_name());
((MyViewHolder)holder).sdv.setImageURI(Uri.parse(listBean.get(position).getPic_big()));
((MyViewHolder) holder).cb_item.setChecked(list.get(position).isFalg());
//flag为true设置checkbox可见,反之不可见
if(flag){
((MyViewHolder) holder).cb_item.setVisibility(View.VISIBLE);
}else{
((MyViewHolder) holder).cb_item.setVisibility(View.INVISIBLE);
}
((MyViewHolder) holder).cb_item.setOnClickListener(new View.OnClickListener() {
//防止接口对象为空
@Override
public void onClick(View view) {
if(listener!=null){
list.get(position).setFalg(((CheckBox)view).isChecked());
listener.OnItemClick(list,position);
}
}
});
}
//recyclerview 的点击事件
OnItemClickListener listener;
public void setOnItemClickListener(OnItemClickListener listener){
this.listener=listener;
}
public interface OnItemClickListener{
public void OnItemClick(List<CheakBean> list,int position);
}
@Override
public int getItemCount() {
return listBean!=null?listBean.size():0;
}
public static class MyViewHolder extends XRecyclerView.ViewHolder{
SimpleDraweeView sdv;
TextView tv_title,tv_name;
CheckBox cb_item;
public MyViewHolder(View itemView) {
super(itemView);
cb_item=itemView.findViewById(R.id.cb_item);
sdv=itemView.findViewById(R.id.sdv);
tv_title=itemView.findViewById(R.id.tv_title);
tv_name=itemView.findViewById(R.id.tv_name);
}
}
}
MainActivity
public class MainActivity extends BaseActivity<RecyclerPresenter> implements IRecyView {
private XRecyclerView mXrv;
private MyRecyclerAdapter adapter;
private ImageView mIconIv;
private CheckBox mCompleteTv;
private CheckBox mCb;
private Button mDeleteBtn;
private RelativeLayout quanxuan;
private boolean flag = false;
List<CheakBean> list;
List<MusicBean.SongListBean> listBean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initdata();
}
private void initView() {
mXrv = (XRecyclerView) findViewById(R.id.xrv);
mIconIv = (ImageView) findViewById(R.id.iv_icon);
mCompleteTv = (CheckBox) findViewById(R.id.tv_complete);
mCb = (CheckBox) findViewById(R.id.cb);
mDeleteBtn = (Button) findViewById(R.id.btn_delete);
quanxuan = (RelativeLayout) findViewById(R.id.rl_cancel);
}
private void initdata() {
showRecycler();
presenter.showData();
//编辑
mCompleteTv.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){
mCompleteTv.setText("完成");
adapter.setVisible(b);
quanxuan.setVisibility(View.VISIBLE);
adapter.notifyDataSetChanged();
}else{
mCompleteTv.setText("编辑");
adapter.setVisible(b);
quanxuan.setVisibility(View.GONE);
adapter.notifyDataSetChanged();
}
}
});
//全选
mCb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (CheakBean cheakbean:list) {
if(mCb.isChecked()){
cheakbean.setFalg(true);
} else{
cheakbean.setFalg(false);
}
}
adapter.notifyDataSetChanged();
}
});
adapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {
@Override
public void OnItemClick(List<CheakBean> list, int position) {
boolean check=true;
for(int i=0;i<list.size();i++){
if(list.get(i).isFalg()==false){
check=false;
}
}
mCb.setChecked(check);
}
});
//删除
mDeleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for(int i=list.size()-1;i>=0;i--){
if(list.get(i).isFalg()){
list.remove(i);
listBean.remove(i);
}
}
adapter.notifyDataSetChanged();
}
});
}
@Override
public void showRecycler() {
LinearLayoutManager manager = new LinearLayoutManager(this);
mXrv.setLayoutManager(manager);
adapter = new MyRecyclerAdapter(this,listBean);
mXrv.setAdapter(adapter);
}
@Override
public void showRefresh(List<MusicBean.SongListBean> listBean, List<CheakBean> list) {
this.list=list;
this.listBean=listBean;
adapter.setRefresh(listBean,list);
}
@Override
protected void createPresenter() {
presenter=new RecyclerPresenter(this);
}
}
//实现解绑
public abstract class BaseActivity<T extends IRecyclerPresenter> extends AppCompatActivity{
public T presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createPresenter();
}
protected abstract void createPresenter();
@Override
protected void onDestroy() {
super.onDestroy();
if(presenter!=null){
presenter.deatch();
}
}
}