RecyclerView多条目加载 下拉刷新 上拉加载

先 添加依赖

//加载  图片用的包
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//Gson
implementation 'com.google.code.gson:gson:2.6.2'

//xRecyclerView的依赖
implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
// OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
//拦截器
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'

设置 权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:name=".app.MyApp"

主布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.example.day20180627.MainActivity"
    android:orientation="vertical"
    >

      <com.jcodecraeer.xrecyclerview.XRecyclerView
          android:id="@+id/main_rv"
          android:layout_width="match_parent"
          android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView>
</LinearLayout>

子布局1

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
        <TextView
            android:id="@+id/item_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_alignParentTop="true"
            android:layout_toLeftOf="@+id/item_img"
            android:layout_toStartOf="@+id/item_img"
            android:text="title"
            android:textSize="17sp" />

        <ImageView
            android:id="@+id/item_img"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/item_tvv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/item_img"
            android:layout_marginEnd="11dp"
            android:layout_marginRight="11dp"
            android:layout_toLeftOf="@+id/item_img"
            android:layout_toStartOf="@+id/item_img"
            android:text="views" />
</RelativeLayout>
 
 

子布局2

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:text="title"
            android:textSize="17dp"
            android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/title"
        android:layout_marginTop="31dp"
         />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignTop="@+id/imageView"
        android:layout_centerHorizontal="true"
       />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/imageView2"
      />
    <TextView
        android:id="@+id/pinglun"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="23dp"
        android:layout_marginTop="23dp"
        android:layout_marginRight="23dp"
        android:text="评论"
        android:layout_below="@+id/imageView3"
        />
</RelativeLayout>
写baseActivity   Basepresenter  IView    自己写

model层


public class MainModel {
    private static final String TAG = "MainModel";
    public void getNews(Integer page, final IMainModelCallback iMainModelCallback){
        OkHttpUtils oKhttpUtils = OkHttpUtils.getInstance();

        oKhttpUtils.doGet(HttpConfig.MAIN_SHUJU+"?page="+page, new OkHttpUtils.OkCallback() {

            @Override
            public void getFailure(Exception e) {
                if (iMainModelCallback!=null) {
                    iMainModelCallback.getFaild("有错误");
                }
            }

            @Override
            public void getResponse(String json) {
                MainBean mainBean = new Gson().fromJson(json, MainBean.class);
                Log.d(TAG, "kkkkkkkkkkk: "+"json");
                int code = mainBean.getCode();
                Log.d(TAG, "-------------: "+code);
                if(0==code){
                    if (iMainModelCallback!=null) {
                        iMainModelCallback.getSuccess(mainBean);
                    }
                }else{
                    if (iMainModelCallback!=null) {
                        iMainModelCallback.getFaild("请求数据失败");
                    }
                }
            }

        });
    }

    public interface IMainModelCallback{
        void getSuccess(MainBean newsBean);
        void getFaild(String e);
    }

}

presenter层



public class Mainpresenter extends BasePresenter<MainView> {
     private MainModel mainModel;
    public Mainpresenter(MainView view) {
        super(view);
    }

    @Override
    protected void initModel() {
            mainModel=  new MainModel();
    }
     public void getNews(Integer page){
           mainModel.getNews(page, new MainModel.IMainModelCallback() {
               @Override
               public void getSuccess(MainBean newsBean) {
                   if(view!=null){
                        view.onSuccess(newsBean);
                   }
               }

               @Override
               public void getFaild(String e) {
                           if(view!=null){
                               view.onFaild("有误");
                           }
               }
           });
     }
}

view 层

public interface MainView extends IView{
    void onSuccess(MainBean loginBean);
    void onFaild(String error);
}
OkHttpUtils


public class OkHttpUtils {
    private static OkHttpUtils okHttpUtils;
    private final Handler mhandler;
    private OkHttpClient client ;

    private OkHttpUtils(){
        //日志拦截器
       HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
       httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        mhandler = new Handler(Looper.getMainLooper());
        client = new OkHttpClient.Builder()
                /*.connectTimeout(5000, TimeUnit.MILLISECONDS)
                .writeTimeout(5000, TimeUnit.MILLISECONDS)
                .readTimeout(5000, TimeUnit.MILLISECONDS)*/
               .addInterceptor(httpLoggingInterceptor)
                .build();
    }
    public static OkHttpUtils getInstance(){
        if (okHttpUtils==null){
            synchronized (OkHttpUtils.class){
                if (okHttpUtils==null){
                    return okHttpUtils=new OkHttpUtils();
                }
            }
        }
        return okHttpUtils;
    }
    public void doGet(String url, final OkCallback okCallback) {
        Request request = new Request.Builder()
                .get()
                .url(url)
                .build();
        final Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (okCallback != null) {
                    //切换到主线程
                    mhandler.post(new Runnable() {
                        @Override
                        public void run() {
                            okCallback.getFailure(e);
                        }
                    });

                }
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {

                try {
                    if (response != null && response.isSuccessful()) {
                        final String json = response.body().string();
                        mhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                if (okCallback != null) {
                                    okCallback.getResponse(json);
                                    return;
                                }

                            }
                        });
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });
    }

    public void doPost(String url, Map<String,String> map, final OkCallback okCallback){
        FormBody.Builder builder = new FormBody.Builder();
        for (String key:map.keySet()) {
            builder.add(key,map.get(key));
        }
        FormBody formBody = builder.build();
        Request request = new Request.Builder()
                .post(formBody)
                .url(url)
                .build();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (okCallback!=null){
                    mhandler.post(new Runnable() {
                        @Override
                        public void run() {
                            okCallback.getFailure(e);
                        }
                    });
                }
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                mhandler.post(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            if (response!=null && response.isSuccessful()){
                                String s = response.body().string();
                                if (okCallback!=null){
                                    okCallback.getResponse(s);
                                    return;
                                }
                            }
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                        if (okCallback!=null){
                            okCallback.getFailure(new Exception("网络异常"));
                        }
                    }
                });
            }
        });
    }


    public interface OkCallback{
        void getFailure(Exception e);
        void getResponse(String josn);


    }


}

适配器


public class MyAdapter extends RecyclerView.Adapter {
  private List<MainBean.DataBeanX.DataBean> list;
  private int viewType01=0;
    private static final String TAG = "MyAdapter";
  private  int viewType02=1;
    public MyAdapter(List<MainBean.DataBeanX.DataBean> list) {
        this.list = list;
    }



    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_main,parent, false);
        View view2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1_main, parent, false);

        if(viewType==viewType01){
             return new ViewHodler01(view1);
         }else{
            return  new ViewHolder02(view2);
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        int itemViewType = getItemViewType(position);

        switch (itemViewType){
            case 0:
                Log.d(TAG, "++++++++ "+list.get(position).getTitle());
                ((ViewHodler01)holder).textView01.setText(list.get(position).getTitle()+"");
                //((ViewHodler01)holder).textView02.setText(list.get(position).getTitle());
                String url="http://365jia.cn/uploads/"+list.get(position).getPics().get(0);
                ImageLoader.getInstance().displayImage(url,((ViewHodler01) holder).imageView, MyApp.getOptions());
                break;
            case 1:
                ((ViewHolder02)holder).textView01.setText(list.get(position).getTitle());
                ((ViewHolder02)holder).textView02.setText(list.get(position).getComment_amount()+"");
                String url0="http://365jia.cn/uploads/"+list.get(position).getPics().get(0);
                String url1="http://365jia.cn/uploads/"+list.get(position).getPics().get(1);
                String url2="http://365jia.cn/uploads/"+list.get(position).getPics().get(2);
                ImageLoader.getInstance().displayImage(url0,((ViewHolder02) holder).imageView,MyApp.getOptions());
                ImageLoader.getInstance().displayImage(url1,((ViewHolder02) holder).imageView2,MyApp.getOptions());
                ImageLoader.getInstance().displayImage(url2,((ViewHolder02) holder).imageView3,MyApp.getOptions());

                break;
                }

    }

    @Override
    public int getItemCount() {
        return list==null ? 0 :list.size();
    }

    public class ViewHodler01 extends RecyclerView.ViewHolder{
    private TextView textView01,textView02;
    private ImageView imageView;
        public ViewHodler01(View itemView) {
            super(itemView);
           textView01= itemView.findViewById(R.id.item_tv);
            textView02= itemView.findViewById(R.id.item_tvv);
           imageView= itemView.findViewById(R.id.item_img);
        }
    }
        public class  ViewHolder02 extends XRecyclerView.ViewHolder{
              private TextView textView01,textView02;
              private ImageView imageView,imageView2,imageView3;
            public ViewHolder02(View itemView) {
                super(itemView);
              textView01=  itemView.findViewById(R.id.title);
            textView02=  itemView.findViewById(R.id.pinglun);
            imageView=itemView.findViewById(R.id.imageView);
            imageView2=itemView.findViewById(R.id.imageView2);
            imageView3=itemView.findViewById(R.id.imageView3);
            }
        }
  public int getItemViewType(int position){
      List<String> pics = list.get(position).getPics();
      if(pics.size()<3){
          return  viewType01;
      }
      return  viewType02;
  }

}

主Activity

  

public class MainActivity extends BaseActivity<Mainpresenter> implements View.OnClickListener,MainView {
  private static final String TAG = "MainActivity";
  private MyAdapter myAdapter;
  private List<MainBean.DataBeanX.DataBean> list=new ArrayList<>();
    private XRecyclerView xRecyclerView;
    boolean flag = true;
    int type = 2;
    android.os.Handler handler = new android.os.Handler();
    @Override
    public void onClick(View v) {

    }

    @Override
    public Context context() {
        return this;
    }

    @Override
    public void onSuccess(MainBean loginBean) {
      Toast.makeText(MainActivity.this,"666",Toast.LENGTH_LONG).show();
        List<MainBean.DataBeanX.DataBean> data = loginBean.getData().getData();
      LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
      linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
      list.addAll(data);
          //设置适配器
      myAdapter=  new MyAdapter(list);
      xRecyclerView.setLayoutManager(linearLayoutManager);
      xRecyclerView.setAdapter(myAdapter);
      //下拉刷新  上拉加载
      xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
        @Override
        public void onRefresh() {
              handler.post(new Runnable() {
                  @Override
                  public void run() {
                       flag=true;
                       type++;
                       initDatas();
                      myAdapter.notifyDataSetChanged();
                      xRecyclerView.refreshComplete();
                  }
              });

        }

        @Override
        public void onLoadMore() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    flag=false;
                    type++;
                    initDatas();
                    myAdapter.notifyDataSetChanged();
                    xRecyclerView.refreshComplete();
                }
            });

        }
      });
        xRecyclerView.refreshComplete();
    }

  @Override
  public void onFaild(String error) {

  }


    @Override
    protected Mainpresenter providePresenter() {
        return new Mainpresenter(this);
    }

    @Override
    protected int provideLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initDatas() {
      presenter.getNews(1);
    }

    @Override
    protected void initListener() {

    }

    @Override
    protected void initViews() {//设计
          xRecyclerView= (XRecyclerView) findViewById(R.id.main_rv);

    }
 //调用解决内存泄漏的方法
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}


猜你喜欢

转载自blog.csdn.net/qq_41637459/article/details/80834637