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

来源:互联网 发布:ubuntu引导没有win10 编辑:程序博客网 时间:2024/05/21 17:24

效果图
这里写图片描述

这里写图片描述
和上一个不一样的是这个是用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
原创粉丝点击