recycleview加载数据实现数据刷新上拉下拉 Demo 用到retrofit 和mvp模式 图片展示

来源:互联网 发布:驾驶员网络教学培训 编辑:程序博客网 时间:2024/06/04 18:27

    布局文件

 

<?xml version="1.0" encoding="utf-8"?><RelativeLayout 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.guoqiang7day.MainActivity">      <com.jcodecraeer.xrecyclerview.XRecyclerView          android:id="@+id/recycleview01"          android:layout_width="match_parent"          android:layout_height="match_parent">      </com.jcodecraeer.xrecyclerview.XRecyclerView> </RelativeLayout>
 


  item01 条目布局

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto">    <LinearLayout        android:orientation="horizontal"        android:layout_width="match_parent"        android:layout_height="200dp">        <com.facebook.drawee.view.SimpleDraweeView            android:id="@+id/SimpleDraweeView01"            android:layout_width="200dp"            android:layout_height="200dp"            app:roundAsCircle="true"            />        <TextView            android:id="@+id/Titleview01"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textSize="25sp"            android:text="asdfsfd"            />      </LinearLayout></LinearLayout>

       



  //add依赖compile 'com.facebook.fresco:fresco:1.5.0'compile 'com.jakewharton:butterknife:8.8.1' //找控件annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'compile 'com.squareup.retrofit2:retrofit:2.3.0'  //网络获取数据implementation 'com.android.support:recyclerview-v7:27.0.1' //条目compile 'com.jcodecraeer:xrecyclerview:1.3.2'compile 'com.squareup.retrofit2:converter-gson:2.3.0'  //解析AddC Application 里面compile 'com.android.support:recyclerview-v7:25.3.1'
 

 

 <uses-permission android:name="android.permission.INTERNET"></uses-permission><application    android:name=".IApplication"
 


   1.

package com.example.guoqiang7day;import com.example.guoqiang7day.Bean01.Bean;import retrofit2.Call;import retrofit2.http.GET;import retrofit2.http.Query;/** * Created by gq on 2017/12/5. */public interface RetrofitServer {    @GET("/nba/") //api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10      Call<Bean> getServer(@Query("key") String key,@Query("num") String num);}
       2.

package com.example.guoqiang7day;import android.app.Application;import com.example.guoqiang7day.Bean01.Bean;import com.facebook.drawee.backends.pipeline.Fresco;import retrofit2.Call;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;/** * Created by gq on 2017/12/5. */public class  IApplication  extends Application{    public static  RetrofitServer server1;    @Override    public void onCreate() {        super.onCreate();        Fresco.initialize(this);        //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe        Retrofit retrofit = new Retrofit.Builder()                .baseUrl("http://api.tianapi.com") //前面地址头                .addConverterFactory(GsonConverterFactory.create())                .build();        server1 = retrofit.create(RetrofitServer.class);    }}

  3.  model层接口

package com.example.guoqiang7day.modle;import retrofit2.Callback;/** * Created by gq on 2017/12/5. */public interface IMogetBase {      public  void  getDatabse(String key,String num,Callback callback);}
  modle 实现类

package com.example.guoqiang7day.modle;import com.example.guoqiang7day.Bean01.Bean;import com.example.guoqiang7day.IApplication;import java.security.Key;import retrofit2.Call;import retrofit2.Callback;/** * Created by gq on 2017/12/5. */public class MymodleDataBean  implements IMogetBase{    @Override    public void getDatabse( String key,String num,Callback callback) {          //直接引用人retrofit的请求方式        /*  Call<Bean> call = IApplication.server1.getServer(key,num);           call.enqueue(callback);*/        Call<Bean> call = IApplication.server1.getServer(key, num);          call.enqueue(callback);    }}
  

  p层

 

package com.example.guoqiang7day.presenter;import android.content.Context;import com.example.guoqiang7day.Bean01.Bean;import com.example.guoqiang7day.MainActivity;import com.example.guoqiang7day.modle.MymodleDataBean;import com.example.guoqiang7day.view.IShouDataBean;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;/** * Created by gq on 2017/12/5. */public class Mypresenter {  private    Context context; private    MymodleDataBean modle;  private   IShouDataBean view;    public Mypresenter(Context context, IShouDataBean view) {            this.context=context;            this.view=view;            modle=new MymodleDataBean();    }       public void  aishasha(int num) {              modle.getDatabse("71e58b5b2f930eaf1f937407acde08fe",num+"", new Callback() {                  @Override                  public void onResponse(Call call, Response response) {                      Bean bean = (Bean) response.body();                      view.MyShouDatabaseView(bean);                    }                  @Override                  public void onFailure(Call call, Throwable t) {                  }              });       }}
 


 v层 activity 层

   

package com.example.guoqiang7day;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import com.example.guoqiang7day.Adapter.MyAdapter;import com.example.guoqiang7day.Bean01.Bean;import com.example.guoqiang7day.presenter.Mypresenter;import com.example.guoqiang7day.view.IShouDataBean;import com.jcodecraeer.xrecyclerview.XRecyclerView;public class MainActivity extends AppCompatActivity  implements IShouDataBean{        Mypresenter  mypresenter=new Mypresenter(this,this);      private XRecyclerView xRecyclerView;       private  int num1=15;    private MyAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        xRecyclerView = findViewById(R.id.recycleview01);          mypresenter.aishasha(15);  //调用获取值          LinearLayoutManager layoutManager = new LinearLayoutManager(this);        xRecyclerView.setLayoutManager(layoutManager);          xRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {              @Override              public void onRefresh() {              //当下拉刷新的时候,重新获取数据,所有curr要变回0,并且把集合list清空                     mypresenter.aishasha(15);                     adapter.notifyDataSetChanged();                     xRecyclerView.refreshComplete();              }              @Override              public void onLoadMore() {                  //当上拉加载的时候,因为一次获取是10个数据,所也在获取的时候就要在加10的地方开始获取//                如:第一次0——9;//                    第二次10——19;                  num1+=5;                  mypresenter.aishasha(15);                  adapter.notifyDataSetChanged();                  xRecyclerView.refreshComplete();              }          });    }    @Override    public void MyShouDatabaseView(Bean bean) {          //等待接收数据        if (adapter==null){            adapter = new MyAdapter(this,bean);            xRecyclerView.setAdapter(adapter);        }else {            adapter.notifyDataSetChanged();        }    }}


package com.example.guoqiang7day.Adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.example.guoqiang7day.Bean01.Bean;import com.example.guoqiang7day.R;import com.facebook.drawee.view.SimpleDraweeView;import butterknife.BindView;import butterknife.ButterKnife;/** * Created by gq on 2017/12/5. */public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {    Context context;    Bean bean;    public MyAdapter(Context context, Bean bean) {        this.context = context;        this.bean = bean;    }    @Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //视图V        View view = View.inflate(context, R.layout.item01, null);        return new ViewHolder(view); //绑定在一块    }    @Override    public void onBindViewHolder(ViewHolder holder, int position) {       holder.mSimpleDraweeView01.setImageURI(bean.getNewslist().get(position).getPicUrl());       holder.mTitleview01.setText(bean.getNewslist().get(position).getTitle());    }    @Override    public int getItemCount() {        return bean.getNewslist().size();    }    static class ViewHolder extends RecyclerView.ViewHolder{        @BindView(R.id.Titleview01)        TextView mTitleview01;        @BindView(R.id.SimpleDraweeView01)        SimpleDraweeView mSimpleDraweeView01;        ViewHolder(View view) {            super(view);            ButterKnife.bind(this, view);        }    }}

 

 




阅读全文
0 0