MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除

效果图
这里写图片描述

这里写图片描述
和上一个不一样的是这个是用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();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值