MVP+Retrofit网络请求和添加拦截器+Fresco+全选反选与删除
2017-11-06 20:33
363 查看
效果图
我们先导入依赖 compile 'com.android.support:design:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
//fresco
compile 'com.facebook.fresco:fresco:0.12.0'
然后加入网络权限
因为用MVP模式实现,所以在main文件夹下创建module,view,presenter3个文件夹
然后布局 activity_main.xml <LinearLayout
android:id="@+id/buju"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="返回"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button" />
<TextView
android:text="我的收藏"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:textSize="20dp"
android:gravity="center"
android:layout_weight="2"/>
<Button
android:id="@+id/btn_bj"
android:text="编辑"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:layout_below="@+id/buju"
android:id="@+id/id_recyclerview"
android:dividerHeight="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/caozuolayout"
android:orientation="horizontal"
>
<CheckBox
android:layout_width="80dp"
android:layout_height="50dp"
android:id="@+id/checkall"
android:text="全选"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_delete"
android:text="删除"
android:background="@android:color/white"
/>
</LinearLayout>
然后是recyclerview的item.xml子布局
创建bean包,在里边创建封装类,封装你所需要的数据
创建一个API类,里边放着我们需要请求的网址(我用的是拼接法)public class API{
public static final String BASE_URL= "http://tingapi.ting.baidu.com/";
}
创建一个ApiService类,用来拼接网址和调用请求网络数据的方法public interface ApiService {
@GET("v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")
Observable<NewsBean> getNoParams();
}
MVP实现
在module下创建IModel接口/**
* Model中定义一个接口
*
* 定义一个解析数据的方法(传入url路径)
*/
public interface IModel {
void getJson(String url);
}
然后创建UserModel,它的实现类
这里边有实现retrofit方法和retrofit添加拦截的方法(实例化OKhttpclient.builder,然后添加拦截器,要用你自己所需要的拦截器类,之后一定要记得在下边的代码:创建retrofit中,要添加上刚刚实例化的OKhttp对象,这样的话拦截器就添加成功了)
/**
* IModel的实现类,用来处理耗时操作
*/
public class UserModel implements IModel{
ArrayList<NewsBean.SongListBean> list=new ArrayList<>();
private OnFinishLisenter lisenter;
//定义一个公开的接口,可以写成外部接口
public interface OnFinishLisenter{
//得到数据
void OnFinish(ArrayList<NewsBean.SongListBean> list);
}
public void setOnUserModel(OnFinishLisenter lisenter) {
this.lisenter = lisenter;
}
/*
* 重写IModel中 请求数据的方法
* */
@Override
public void getJson(String url) {
//初始化okhttpclient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())//这里添加拦截器,我的拦截器是LoggingInterceptor()
.build();
//创建Retrofit(多添加一句话.client)
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)//把有拦截器的 okhttp对象放入retrofit
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//动态代理
ApiService apiService = retrofit.create(ApiService.class);
//得到Observable
Observable<NewsBean> observable = apiService.getNoParams();//获取数据源
observable.subscribeOn(Schedulers.io())//IO线程做耗时操作
.observeOn(AndroidSchedulers.mainThread())//在主线程更新UI
.subscribe(new Observer<NewsBean>() {//实例化一个观察者
//完成
@Override
public void onCompleted() {
}
//异常
@Override
public void onError(Throwable e) {
}
// 加载中
@Override
public void onNext(NewsBean newsBean) {
list = (ArrayList<NewsBean.SongListBean>) newsBean.getSong_list();
//把数据通过这个方法传入P层
lisenter.OnFinish(list);
}
});
}
}
在view下创建IVi
4000
ew接口/**
* 在View中定义一个接口
*
* (定义一个得到数据的方法)
*/
public interface IView {
//得到P层的网络请求数据
void getUser(ArrayList<NewsBean.SongListBean> list);
}
在presenter下创建UserPresenter类,建立M和V的关系/**
* P层 建立M和V之间的关系
*/
public class UserPresenter implements UserModel.OnFinishLisenter{
private final IView userView; //V中的接口
private final UserModel userModel;//M中的实现类
//通过有参构造将M中的数据传入V中
public UserPresenter(IView userView) {
this.userView = userView;
this.userModel = new UserModel();//实例化Module
userModel.setOnUserModel(this); //这句话重点
}
public void getUrl(String url) {
//得到Model中请求数据的方法
userModel.getJson(url);
}
@Override
public void OnFinish(ArrayList<NewsBean.SongListBean> list) {
//把从M层中传过来的数据通过以下的方法传到V层中
userView.getUser(list);
}
}
创建adapter文件夹,并创建一个HomeAdapter类(会报错往下看)
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
private ArrayList<MyChecks> checklist;
private Context context;
private List<NewsBean.SongListBean> list;
public HomeAdapter(ArrayList<MyChecks> checklist, Context context, List<NewsBean.SongListBean> list) {
this.checklist = checklist;
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.item, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position)
{
holder.tv.setText(list.get(position).getTitle());
holder.tv2.setText(list.get(position).getAuthor());
//用Fresco形式得到的图片
Uri uri = Uri.parse(list.get(position).getPic_small());
holder.img.setImageURI(uri);
//条目的隐藏与显示
for(int j = 0 ; j < checklist.size();j++){
if(checklist.get(j).getGone()==0){ //0的时候隐藏
holder.mycheck.setVisibility(View.GONE);
}else{
holder.mycheck.setVisibility(View.VISIBLE);
}
}
//将条目中的框默认为选中状态
holder.mycheck.setChecked(checklist.get(position).ischeck());
holder.mycheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(checklist.get(position).ischeck()==false){
checklist.set(position,new MyChecks(true,1));
}else{
checklist.set(position,new MyChecks(false,1));
}
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount()
{
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv,tv2;
//这是用来实现Fresco展示图片的控件
SimpleDraweeView img;
//这是复选框
CheckBox mycheck;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.text);
tv2 = (TextView) view.findViewById(R.id.text2);
img = (SimpleDraweeView) view.findViewById(R.id.image);
mycheck = (CheckBox) view.findViewById(R.id.mycheck);
}
}
}
上边的HomeAdapter中我还实现了全选反选的删除和Fresco加载图片,下边就讲一下全选反选+Fresco
一.全选反选
在bean里创建它的封装类,封装两个参数public class MyChecks {
private boolean ischeck; //用来判断框框的状态
private int gone = 0; //用来隐藏显示
@Override
public String toString() {
return "MyChecks{" +
"ischeck=" + ischeck +
", gone=" + gone +
'}';
}
public boolean ischeck() {
return ischeck;
}
public void setIscheck(boolean ischeck) {
this.ischeck = ischeck;
}
public int getGone() {
return gone;
}
public void setGone(int gone) {
this.gone = gone;
}
public MyChecks(boolean ischeck, int gone) {
this.ischeck = ischeck;
this.gone = gone;
}
}
二.Fresco加载图片
其实我们已经差不多做好了Fresco的基本使用,现在只需要一句话(必须写)
创建一个MyApp,继承Application
public class MyApp extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
不要忘记在权限里声明MyApp(包名是自己) android:name="com.test.app.MyApp"
好了,现在回到主页面,实现IView接口(一定不能忘记写实现IView)
这里边有Recyclerview和全选反选+删除的实现,其中recyclerview有列表展示的实现和添加线,需要再添加一个工具类,在此就不复述了,可以去参考鸿洋对于recyclerview的详解http://blog.csdn.net/lmj623565791/article/details/45059587
public class MainActivity extends AppCompatActivity implements IView{
private RecyclerView mRecyclerView;
UserPresenter userPresenter; //实例化P层
HomeAdapter adapter;
private List<NewsBean.SongListBean> mylist;
ArrayList<MyChecks> mychecklist;
private Button checkall;
private Button btn_bj;
private Button btn_delete;
LinearLayout layout;
boolean ischeckall = false;
boolean ischeck = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
//实例化P层,参数类型是IView
userPresenter = new UserPresenter(this);
//判断Fragment在哪一页
userPresenter.getUrl(API.BASE_URL);//P层中网络请求的方法
btn_bj = (Button) findViewById(R.id.btn_bj);
layout = (LinearLayout) findViewById(R.id.caozuolayout);
layout.setVisibility(View.GONE);
checkall = (CheckBox) findViewById(R.id.checkall);
btn_delete = (Button) findViewById(R.id.btn_delete);
inData();
}
public void inData() {
//显示隐藏编辑
btn_bj.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ischeckall == true) {
btn_bj.setText("编辑");
layout.setVisibility(View.GONE);
for (int i = 0; i < mychecklist.size(); i++) {
mychecklist.set(i, new MyChecks(false, 0));
}
ischeckall = false;
} else {
btn_bj.setText("完成");
layout.setVisibility(View.VISIBLE);
for (int i = 0; i < mychecklist.size(); i++) {
mychecklist.set(i, new MyChecks(false, 1));
}
ischeckall = true;
}
adapter.notifyDataSetChanged();
}
});
//全选
checkall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(ischeck == false){
for(int i = 0 ; i < mychecklist.size();i++){
mychecklist.set(i,new MyChecks(true,1));
}
ischeck =true;
}else{
for(int i = 0 ; i < mychecklist.size();i++){
mychecklist.set(i,new MyChecks(false,1));
ischeck =false;
}
}
adapter.notifyDataSetChanged();
}
});
//删除
btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArrayList<NewsBean.SongListBean> deletelist = new ArrayList<NewsBean.SongListBean>();
ArrayList<MyChecks> deltelist2 = new ArrayList<MyChecks>();
for(int i = 0 ; i < mylist.size();i++){
if(mychecklist.get(i).ischeck()==true){
deletelist.add(mylist.get(i));
deltelist2.add(mychecklist.get(i));
}
}
mylist.removeAll(deletelist);
mychecklist.removeAll(deltelist2);
if(mylist.size() == 0){
btn_bj.setText("编辑");
layout.setVisibility(View.GONE);
ischeckall = false;
}
adapter.notifyDataSetChanged();
}
});
}
@Override
public void getUser(ArrayList<NewsBean.SongListBean> list) {
mychecklist = new ArrayList<>();
mylist = new ArrayList<>();
mylist = list;
for(int i = 0;i < list.size(); i++){
mychecklist.add(new MyChecks(false,0));
}
adapter = new HomeAdapter(mychecklist,MainActivity.this,list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
mRecyclerView.setAdapter(adapter);
}
}
我们先导入依赖 compile 'com.android.support:design:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
//fresco
compile 'com.facebook.fresco:fresco:0.12.0'
然后加入网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
因为用MVP模式实现,所以在main文件夹下创建module,view,presenter3个文件夹
然后布局 activity_main.xml <LinearLayout
android:id="@+id/buju"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="返回"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button" />
<TextView
android:text="我的收藏"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:textSize="20dp"
android:gravity="center"
android:layout_weight="2"/>
<Button
android:id="@+id/btn_bj"
android:text="编辑"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:layout_below="@+id/buju"
android:id="@+id/id_recyclerview"
android:dividerHeight="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/caozuolayout"
android:orientation="horizontal"
>
<CheckBox
android:layout_width="80dp"
android:layout_height="50dp"
android:id="@+id/checkall"
android:text="全选"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_delete"
android:text="删除"
android:background="@android:color/white"
/>
</LinearLayout>
然后是recyclerview的item.xml子布局
<CheckBox android:layout_width="80dp" android:layout_height="50dp" android:id="@+id/mycheck" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/image" android:layout_width="90dp" android:layout_height="90dp" fresco:placeholderImage="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </LinearLayout>
创建bean包,在里边创建封装类,封装你所需要的数据
创建一个API类,里边放着我们需要请求的网址(我用的是拼接法)public class API{
public static final String BASE_URL= "http://tingapi.ting.baidu.com/";
}
创建一个ApiService类,用来拼接网址和调用请求网络数据的方法public interface ApiService {
@GET("v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")
Observable<NewsBean> getNoParams();
}
MVP实现
在module下创建IModel接口/**
* Model中定义一个接口
*
* 定义一个解析数据的方法(传入url路径)
*/
public interface IModel {
void getJson(String url);
}
然后创建UserModel,它的实现类
这里边有实现retrofit方法和retrofit添加拦截的方法(实例化OKhttpclient.builder,然后添加拦截器,要用你自己所需要的拦截器类,之后一定要记得在下边的代码:创建retrofit中,要添加上刚刚实例化的OKhttp对象,这样的话拦截器就添加成功了)
/**
* IModel的实现类,用来处理耗时操作
*/
public class UserModel implements IModel{
ArrayList<NewsBean.SongListBean> list=new ArrayList<>();
private OnFinishLisenter lisenter;
//定义一个公开的接口,可以写成外部接口
public interface OnFinishLisenter{
//得到数据
void OnFinish(ArrayList<NewsBean.SongListBean> list);
}
public void setOnUserModel(OnFinishLisenter lisenter) {
this.lisenter = lisenter;
}
/*
* 重写IModel中 请求数据的方法
* */
@Override
public void getJson(String url) {
//初始化okhttpclient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())//这里添加拦截器,我的拦截器是LoggingInterceptor()
.build();
//创建Retrofit(多添加一句话.client)
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(url)
.client(okHttpClient)//把有拦截器的 okhttp对象放入retrofit
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
//动态代理
ApiService apiService = retrofit.create(ApiService.class);
//得到Observable
Observable<NewsBean> observable = apiService.getNoParams();//获取数据源
observable.subscribeOn(Schedulers.io())//IO线程做耗时操作
.observeOn(AndroidSchedulers.mainThread())//在主线程更新UI
.subscribe(new Observer<NewsBean>() {//实例化一个观察者
//完成
@Override
public void onCompleted() {
}
//异常
@Override
public void onError(Throwable e) {
}
// 加载中
@Override
public void onNext(NewsBean newsBean) {
list = (ArrayList<NewsBean.SongListBean>) newsBean.getSong_list();
//把数据通过这个方法传入P层
lisenter.OnFinish(list);
}
});
}
}
在view下创建IVi
4000
ew接口/**
* 在View中定义一个接口
*
* (定义一个得到数据的方法)
*/
public interface IView {
//得到P层的网络请求数据
void getUser(ArrayList<NewsBean.SongListBean> list);
}
在presenter下创建UserPresenter类,建立M和V的关系/**
* P层 建立M和V之间的关系
*/
public class UserPresenter implements UserModel.OnFinishLisenter{
private final IView userView; //V中的接口
private final UserModel userModel;//M中的实现类
//通过有参构造将M中的数据传入V中
public UserPresenter(IView userView) {
this.userView = userView;
this.userModel = new UserModel();//实例化Module
userModel.setOnUserModel(this); //这句话重点
}
public void getUrl(String url) {
//得到Model中请求数据的方法
userModel.getJson(url);
}
@Override
public void OnFinish(ArrayList<NewsBean.SongListBean> list) {
//把从M层中传过来的数据通过以下的方法传到V层中
userView.getUser(list);
}
}
创建adapter文件夹,并创建一个HomeAdapter类(会报错往下看)
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
private ArrayList<MyChecks> checklist;
private Context context;
private List<NewsBean.SongListBean> list;
public HomeAdapter(ArrayList<MyChecks> checklist, Context context, List<NewsBean.SongListBean> list) {
this.checklist = checklist;
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.item, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position)
{
holder.tv.setText(list.get(position).getTitle());
holder.tv2.setText(list.get(position).getAuthor());
//用Fresco形式得到的图片
Uri uri = Uri.parse(list.get(position).getPic_small());
holder.img.setImageURI(uri);
//条目的隐藏与显示
for(int j = 0 ; j < checklist.size();j++){
if(checklist.get(j).getGone()==0){ //0的时候隐藏
holder.mycheck.setVisibility(View.GONE);
}else{
holder.mycheck.setVisibility(View.VISIBLE);
}
}
//将条目中的框默认为选中状态
holder.mycheck.setChecked(checklist.get(position).ischeck());
holder.mycheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(checklist.get(position).ischeck()==false){
checklist.set(position,new MyChecks(true,1));
}else{
checklist.set(position,new MyChecks(false,1));
}
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount()
{
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView tv,tv2;
//这是用来实现Fresco展示图片的控件
SimpleDraweeView img;
//这是复选框
CheckBox mycheck;
public MyViewHolder(View view)
{
super(view);
tv = (TextView) view.findViewById(R.id.text);
tv2 = (TextView) view.findViewById(R.id.text2);
img = (SimpleDraweeView) view.findViewById(R.id.image);
mycheck = (CheckBox) view.findViewById(R.id.mycheck);
}
}
}
上边的HomeAdapter中我还实现了全选反选的删除和Fresco加载图片,下边就讲一下全选反选+Fresco
一.全选反选
在bean里创建它的封装类,封装两个参数public class MyChecks {
private boolean ischeck; //用来判断框框的状态
private int gone = 0; //用来隐藏显示
@Override
public String toString() {
return "MyChecks{" +
"ischeck=" + ischeck +
", gone=" + gone +
'}';
}
public boolean ischeck() {
return ischeck;
}
public void setIscheck(boolean ischeck) {
this.ischeck = ischeck;
}
public int getGone() {
return gone;
}
public void setGone(int gone) {
this.gone = gone;
}
public MyChecks(boolean ischeck, int gone) {
this.ischeck = ischeck;
this.gone = gone;
}
}
二.Fresco加载图片
其实我们已经差不多做好了Fresco的基本使用,现在只需要一句话(必须写)
创建一个MyApp,继承Application
public class MyApp extends Application{
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
不要忘记在权限里声明MyApp(包名是自己) android:name="com.test.app.MyApp"
好了,现在回到主页面,实现IView接口(一定不能忘记写实现IView)
这里边有Recyclerview和全选反选+删除的实现,其中recyclerview有列表展示的实现和添加线,需要再添加一个工具类,在此就不复述了,可以去参考鸿洋对于recyclerview的详解http://blog.csdn.net/lmj623565791/article/details/45059587
public class MainActivity extends AppCompatActivity implements IView{
private RecyclerView mRecyclerView;
UserPresenter userPresenter; //实例化P层
HomeAdapter adapter;
private List<NewsBean.SongListBean> mylist;
ArrayList<MyChecks> mychecklist;
private Button checkall;
private Button btn_bj;
private Button btn_delete;
LinearLayout layout;
boolean ischeckall = false;
boolean ischeck = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
//实例化P层,参数类型是IView
userPresenter = new UserPresenter(this);
//判断Fragment在哪一页
userPresenter.getUrl(API.BASE_URL);//P层中网络请求的方法
btn_bj = (Button) findViewById(R.id.btn_bj);
layout = (LinearLayout) findViewById(R.id.caozuolayout);
layout.setVisibility(View.GONE);
checkall = (CheckBox) findViewById(R.id.checkall);
btn_delete = (Button) findViewById(R.id.btn_delete);
inData();
}
public void inData() {
//显示隐藏编辑
btn_bj.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (ischeckall == true) {
btn_bj.setText("编辑");
layout.setVisibility(View.GONE);
for (int i = 0; i < mychecklist.size(); i++) {
mychecklist.set(i, new MyChecks(false, 0));
}
ischeckall = false;
} else {
btn_bj.setText("完成");
layout.setVisibility(View.VISIBLE);
for (int i = 0; i < mychecklist.size(); i++) {
mychecklist.set(i, new MyChecks(false, 1));
}
ischeckall = true;
}
adapter.notifyDataSetChanged();
}
});
//全选
checkall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(ischeck == false){
for(int i = 0 ; i < mychecklist.size();i++){
mychecklist.set(i,new MyChecks(true,1));
}
ischeck =true;
}else{
for(int i = 0 ; i < mychecklist.size();i++){
mychecklist.set(i,new MyChecks(false,1));
ischeck =false;
}
}
adapter.notifyDataSetChanged();
}
});
//删除
btn_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArrayList<NewsBean.SongListBean> deletelist = new ArrayList<NewsBean.SongListBean>();
ArrayList<MyChecks> deltelist2 = new ArrayList<MyChecks>();
for(int i = 0 ; i < mylist.size();i++){
if(mychecklist.get(i).ischeck()==true){
deletelist.add(mylist.get(i));
deltelist2.add(mychecklist.get(i));
}
}
mylist.removeAll(deletelist);
mychecklist.removeAll(deltelist2);
if(mylist.size() == 0){
btn_bj.setText("编辑");
layout.setVisibility(View.GONE);
ischeckall = false;
}
adapter.notifyDataSetChanged();
}
});
}
@Override
public void getUser(ArrayList<NewsBean.SongListBean> list) {
mychecklist = new ArrayList<>();
mylist = new ArrayList<>();
mylist = list;
for(int i = 0;i < list.size(); i++){
mychecklist.add(new MyChecks(false,0));
}
adapter = new HomeAdapter(mychecklist,MainActivity.this,list);
mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
mRecyclerView.setAdapter(adapter);
}
}
相关文章推荐
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- android MVP+Retrofit2.0与RxJava网络请求数据,listview展示
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- 打造企业级网络请求框架集合retrofit+gson+mvp(一)
- 添加 retrfiot 拦截器Interceptor ,打印服务器返回的json并添加网络请求公共的header
- 添加二次联动批量删除查询请求网络
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- android RxJava+Retrofit2.0 OkHttp添加日志拦截器和设置请求头
- 添加全选反选批量删除
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- AngularJs实现添加,批量删除,全选,反选等功能
- [置顶] Android 一步步搭建MVP+Retrofit+RxJava网络请求框架
- AngularJs实现添加,批量删除,全选,反选等功能
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- MVP模式实现网络请求数据并添加到列表(Rxjava+Retrofit)
- Android 搭建MVP+Retrofit+RxJava网络请求框架
- 简单的MVP+Retrofit+RxJava请求网络数据(一)
- MVP(Retrofit+RXJava)实现网络请求
- 给retrofit 的 添加okhttp的拦截器,可以让她显示 请求和返回的信息 ,便于查找错误