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
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- MVP+Retrofit+RecyclerView实现加载网络数据
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- Retrofit网络请求+Recyclerview展示数据+Fresco显示图片
- Retrofit网络请求+Recyclerview展示数据+Fresco显示图片
- MVP+Rxjava+Retrofit+Fresco网络请求数据
- 添加查询删除+retrofit请求+okHttp请求+fresco加载图片+recyclerview加载数据二级购物车+视频播放
- MVP+Retrofit网络请求和添加拦截器+Fresco+全选反选与删除
- Retrofit+RxJava+Fresco图片加载框 请求网络数据
- 使用MVP框架,retrofit结合Rxjava以及fresco加载图片,用recycleview实现
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- Fresco图片加载+Eventbus跳转传值+Retrofit请求数据+GreenDao操作数据+Mvp分层+RecyclerView展示数据+ButtonKnife生成控件
- MVP+Rxjava+Fresco+Retrofit实现Recyclerview列表展示
- 展示数据使用:recyclerview,retrofit,greendao,butterknife,eventbus,fresco。实现效果图列表。MVP模式。
- MVP模式实现网络请求数据并添加到列表(Rxjava+Retrofit)
- 使用MVP模式+Retrofit+Fresco加载网络数据
- RxJava结合Retrofit使用 自定义封装类结合泛型 请求网络数据+Fresco+RecyclerView+MVP分层
- mvp,retrofit请求;listview,fresco展示图片
- RecylerView 自定义 LayoutManager 基础一
- 素数的判定
- linux 上安装mysql
- moveit双臂机器人程序
- 室内地图开发
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- Fortran001—— 输入输出和声明
- flume-1.7.0将源码修改为按文件读取数据
- sql优化和索引
- selenium测试环境搭建
- 浮点数加法
- Unity3D-技能CD效果制作
- 探索“双十一”支付背后的金融科技
- java POI 学习第一篇 【创建工作簿,sheet页,单元格】