简单RecyclerView自动轮播+RecyclerView请求数据


权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
依赖
 
 
compile 'com.squareup.okhttp3:okhttp:3.10.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.google.code.gson:gson:2.2.4'

工具类
public class OkhtttpUtils {
    
    //单例模式,把构造方法进行私有化
    
    private OkhtttpUtils(){};
    static  OkHttpClient client;


    public static OkHttpClient getInstance(){


        if (client==null) {
            //更加安全
            synchronized (OkhtttpUtils.class) {
                //缓存的地方     mnt/sdcard
                File file = new File(Environment.getExternalStorageDirectory(), "cache11");
                client = new OkHttpClient().newBuilder()
                        .readTimeout(3000, TimeUnit.SECONDS)   //设置读取超时时间
                        .connectTimeout(3000, TimeUnit.SECONDS) //设置连接的超时时间

                        .cache(new Cache(file, 10 * 1024))
                        .build();
            }
        }
        return client;
    }


    /**
     * get请求
     * Callback  是一个接口
     */
    public static void doGet(String url, Callback callback){

        //1:拿到okhttpclient  对像

        OkHttpClient client = getInstance();
        //2:进行请求的操作

        Request request = new Request.Builder()
                .url(url)
                .build();
        client.newCall(request).enqueue(callback);


    }

    //post请求

    /**
     *
     * @param url  请求的地址
     * @param parms   请求的参数
     * @param callback  callback
     */
    public static void doPost(String url, Map<String,String> parms,Callback callback){

        //得到客户端的对像
        OkHttpClient client = getInstance();

        //不是FormBody,而是一个Builder
        FormBody.Builder body = new FormBody.Builder();
        //key   value
        for (String key:parms.keySet()){
            //value的值
            body.add(key,parms.get(key));
        }
        Request request = new Request.Builder()
                .url(url)
                .post(body.build())
                .build();

        client.newCall(request).enqueue(callback);

    }

    //用来上传图片的

    //url  , 图片  ,参数    Callback
    public static  void upImage(String url,File file,String filenName,Map<String,String> params,Callback callback){

        OkHttpClient client = getInstance();


        //requestBody的实现类  Formbody
        MultipartBody.Builder builder = new MultipartBody.Builder();

        if (params!=null){
            for (String key :params.keySet()){
                builder.addFormDataPart(key,params.get(key));
            }
        }

        //设置类型
        builder.setType(MultipartBody.FORM);


        builder.addFormDataPart("file",filenName,RequestBody.create(MediaType.parse("application/octet-stream"),file));
        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();

        client.newCall(request).enqueue(callback);


    }


}

	DataMoudle接口

public interface DataMoudle {
    void getData(String url,DataPresenter presenter);
}

	MyDataMoudle类

public class MyDataMoudle implements DataMoudle{
    @Override
    public void getData(String url, final DataPresenter presenter) {
        //请求数据
        OkhtttpUtils.doGet(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }
            //请求成功时
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //得到请求内容
                String string = response.body().string();
                //解析
                Gson gson=new Gson();
                JavaBean javaBean = gson.fromJson(string, JavaBean.class);
                JavaBean.DataBean data = javaBean.getData();
                //把得到的数据传给p
                presenter.success(data);
            }
        });
    }
}

	DataPresenter 接口

public interface DataPresenter {
    void success(JavaBean.DataBean data);
    void error();

}

	MyDataPresenter类

public class MyDataPresenter implements DataPresenter{
    private final DataView dataView;
    private final MyDataMoudle myDataMoudle;

    //提供有参构造
    public MyDataPresenter(DataView dataView){
        this.dataView=dataView;
        //创建出m层对象
        myDataMoudle = new MyDataMoudle();

    }
    //请求成功
    @Override
    public void success(JavaBean.DataBean data) {
        dataView.getZData(data);
    }

    @Override
    public void error() {

    }
    //定义通过v层传来来的url,m层请求数据方法
    public void getmdata(String url){
        myDataMoudle.getData(url,this);
    }

}


	DataView 接口

 
 
public interface DataView {
    void getZData(JavaBean.DataBean data);
}

	MainActivity类

public class MainActivity extends AppCompatActivity implements DataView{
   private String url="http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage";
    private RecyclerView re_view;
    private ViewPager pager;
    private int index;
    private String image;
    private RecyclerView lunbo;
    private LinearLayoutManager layoutManager;
    private LinearLayoutManager layoutManager1;

@SuppressLint("HandlerLeak")
private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        JavaBean.DataBean data= (JavaBean.DataBean) msg.obj;

        List<JavaBean.DataBean.Ad1Bean> list = data.getAd1();
        //设置适配器
        MypagerAdapters adapter = new MypagerAdapters(MainActivity.this, list);
        lunbo.setAdapter(adapter);
        lunbo.setHasFixedSize(true);
        //需要用到一个类,SnapHelper的子类PagerSnapHelper.直接追加到上面的recyclerView.setAdapter(adapter) 后面。
        PagerSnapHelper snapHelper = new PagerSnapHelper();
        snapHelper.attachToRecyclerView(lunbo);
        lunbo.scrollToPosition(list.size()*10);
        //自动轮播
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                lunbo.smoothScrollToPosition(layoutManager1.findFirstVisibleItemPosition() + 1);
            }
        }, 2000, 2000, TimeUnit.MILLISECONDS);


        List<JavaBean.DataBean.DefaultGoodsListBean> list2 = data.getDefaultGoodsList();
        //设置控制器
        //LinearLayoutManager manager=new LinearLayoutManager(MainActivity.this,LinearLayoutManager.HORIZONTAL,false);
        GridLayoutManager manager=new GridLayoutManager(MainActivity.this,3);
        re_view.setLayoutManager(manager);
        //re_view设置适配器

        MyReAdapter adapter2=new MyReAdapter(MainActivity.this,list2);
        re_view.setAdapter(adapter2);
    }
};



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到控件
        re_view = findViewById(R.id.re_view);
        lunbo = findViewById(R.id.lunbo);

        layoutManager1 = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        lunbo.setLayoutManager(layoutManager1);

        //创建p层对象
        MyDataPresenter presenter=new MyDataPresenter(this);

        presenter.getmdata(url);



    }
    //得到请求数据方法
    @Override
    public void getZData(JavaBean.DataBean data) {
        //发送消息给handler
        Message message=new Message();
        message.obj=data;
        //发送消息
         handler.sendMessage(message);


    }

}

	轮播图适配器
 
 
 
 
public class MypagerAdapters extends RecyclerView.Adapter{

    Context context;
    List<JavaBean.DataBean.Ad1Bean> ad1;
    private ViewHolder viewHolder;

    public MypagerAdapters(Context context, List<JavaBean.DataBean.Ad1Bean> ad1) {
        this.context=context;
        this.ad1=ad1;

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.recy_lunbo,parent,false);
        viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        viewHolder= (ViewHolder) holder;
        Glide.with(context).load(ad1.get(position%ad1.size()).getImage()).into(viewHolder.re_img);

    }

    @Override
    public int getItemCount() {
        return Integer.MAX_VALUE;
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        private final ImageView re_img;

        public ViewHolder(View itemView) {
            super(itemView);
            re_img = itemView.findViewById(R.id.item_image);
        }
    }
}


	RecyclerView适配器

public class MyReAdapter extends RecyclerView.Adapter{
    Context context;
    List<JavaBean.DataBean.DefaultGoodsListBean> list2;
    private MyViewHolder myViewHolder;

    public MyReAdapter(Context context, List<JavaBean.DataBean.DefaultGoodsListBean> list2) {
            this.list2=list2;
            this.context=context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       //引入布局
        View view= View.inflate(context, R.layout.recy_item,null);
        myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        myViewHolder= (MyViewHolder) holder;
        //赋值
        myViewHolder.re_text.setText(list2.get(position).getGoods_name());
        Glide.with(context).load(list2.get(position).getGoods_img()).into(((MyViewHolder) holder).re_img);

    }

    @Override
    public int getItemCount() {
        return list2.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final ImageView re_img;
        private final TextView re_text;

        public MyViewHolder(View itemView) {
            super(itemView);
            re_img = itemView.findViewById(R.id.re_img);
            re_text = itemView.findViewById(R.id.re_text);
        }

    }
}


activity_main.xml布局

<?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.com.zhoukao1.MainActivity"
    android:orientation="vertical">
    <!--轮播-->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/lunbo"
        android:layout_width="match_parent"
        android:layout_height="150dp">

    </android.support.v7.widget.RecyclerView>
<!--加载数据-->
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/re_view"

    >

</android.support.v7.widget.RecyclerView>

</LinearLayout>

recy_lunbo.xml轮播

<?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.com.zhoukao1.MainActivity"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/item_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       />
</LinearLayout>
 
 
	recy_item.xml布局
 
 
 
 
<?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.com.zhoukao1.MainActivity"
    android:orientation="vertical">

<ImageView
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:id="@+id/re_img"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/re_text"/>

</LinearLayout>


猜你喜欢

转载自blog.csdn.net/lucky_7777777/article/details/80042409