RecyclerView

 

1.MianActivity

package com.example.lenovo.recyclerviewweek3.mvp.view;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.example.lenovo.recyclerviewweek3.R;
import com.example.lenovo.recyclerviewweek3.mvp.adapter.NewsAdapter;
import com.example.lenovo.recyclerviewweek3.mvp.bean.News;
import com.example.lenovo.recyclerviewweek3.mvp.presenter.RecyclerPresenter;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements IView{

    private RecyclerView rvList;
    private List<News.DataBean> list;
    private RecyclerPresenter presenter;
    private NewsAdapter adapter;

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

        rvList = findViewById(R.id.rv_list);

        initData();

        list = new ArrayList<>();
        //适配器
        adapter = new NewsAdapter(this,list);

        //瀑布流管理器
        RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2, LinearLayoutManager.VERTICAL);
        //添加管理器
        rvList.setLayoutManager(layoutManager);

        rvList.setAdapter(adapter);


    }

    private void initData() {
        presenter = new RecyclerPresenter();
        presenter.attach(this);
        presenter.getNews();


    }

    @Override
    public void success(List<News.DataBean> dataBeans) {
        list.addAll(dataBeans);
        adapter.notifyDataSetChanged();
    }

    @Override
    public void faied(Exception e) {
        Toast.makeText(this, "网络异常" + e.getMessage(), Toast.LENGTH_SHORT).show();
    }


}

 

 

2.Adapter

package com.example.lenovo.recyclerviewweek3.mvp.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.lenovo.recyclerviewweek3.R;
import com.example.lenovo.recyclerviewweek3.mvp.bean.News;

import java.util.List;

/**
 * 
 */

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.Holder>{

    private Context context;
    private List<News.DataBean> list;

    public NewsAdapter(Context context, List<News.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View v = View.inflate(context, R.layout.item_recycler,null);

        return new Holder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, int position) {

        holder.txtTitle.setText(list.get(position).getTitle());
        Glide.with(context).load(list.get(position).getThumbnail01()).into(holder.imgLogo);

    }

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

    class Holder extends RecyclerView.ViewHolder{

        private final ImageView imgLogo;
        private final TextView txtTitle;

        public Holder(View itemView) {
            super(itemView);
            imgLogo = itemView.findViewById(R.id.img_logo);
            txtTitle = itemView.findViewById(R.id.txt_Title);
        }
    }

}

 

3 .ICallBack

public interface ICallBack {

    void onsuccess(Object obj);

    void onfaied(Exception e);
}

 

4 IView

public interface IView {

    void success(List<News.DataBean> list);

    void faied(Exception e);

}

 

5 Utils

package com.example.lenovo.recyclerviewweek3.mvp.utils;

import android.os.Handler;

import com.example.lenovo.recyclerviewweek3.mvp.inter.ICallBack;
import com.google.gson.Gson;

import java.io.IOException;
import java.lang.reflect.Type;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * 
 */

public class HttpUtils {

    private static volatile HttpUtils instance;

    private Handler handler = new Handler();
    private OkHttpClient client;

    private HttpUtils(){
           client = new OkHttpClient();
    }

    public static HttpUtils getInstance(){
         if (instance == null){
             synchronized (HttpUtils.class){
                 if (null == instance){
                     instance = new HttpUtils();
                 }
             }
         }

         return instance;
    }



    public void get(String url, final ICallBack callBack , final Type type){

        final Request request = new Request.Builder()
                .get()
                .url(url)
                .build();

        Call call = client.newCall(request);

        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onfaied(e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                 String result = response.body().string();

                Gson gson = new Gson();

                final Object o = gson.fromJson(result, type);

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onsuccess(o);
                    }
                });
            }
        });

    }

}

 

 

6 Model

public class RecyclerModel {

    public void getData(String url, ICallBack callBack, Type type){
        HttpUtils.getInstance().get(url,callBack,type);
    }
}

 

 

7 .Presenter

package com.example.lenovo.recyclerviewweek3.mvp.presenter;

import com.example.lenovo.recyclerviewweek3.mvp.bean.News;
import com.example.lenovo.recyclerviewweek3.mvp.inter.ICallBack;
import com.example.lenovo.recyclerviewweek3.mvp.model.RecyclerModel;
import com.example.lenovo.recyclerviewweek3.mvp.view.IView;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;

/**
 * 
 */

public class RecyclerPresenter {

    private IView iv;
    private RecyclerModel model;

    public void attach(IView iv){
        this.iv=iv;
        model = new RecyclerModel();
    }


    public void getNews(){

        Type type = new TypeToken<News>(){}.getType();

        model.getData("http://www.xieast.com/api/news/news.php?type=top&page=1", new ICallBack() {
            @Override
            public void onsuccess(Object obj) {

                News news = (News) obj;

                if (news !=null){
                    List<News.DataBean> list = news.getData();
                    iv.success(list);
                }


            }

            @Override
            public void onfaied(Exception e) {

                iv.faied(e);
            }
        },type);


    }

}

 

 

 

 

// recyclerview


        // 1. 线性布局管理器,默认一个参数的构造方法实现效果和ListView相似, 默认是纵向的
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
        // 第一个参数是上下文,第二个参数是控制线性布局管理器的方向,第三个参数是是否反转
//        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true);

        // 2. 网格布局管理器,默认两个参数的构造方法和GridView类似,第二个参数是列数
//        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 3);
        // 第二个参数是列数,第三个是方向,第四个是是否反转
//        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this, 3, LinearLayoutManager.HORIZONTAL, true);

        // 3. 瀑布流管理器,只有两个参数的构造方法,第一个是列数,第二个是方向
//        RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL);

        rvNews.setLayoutManager(layoutManager);

        // 添加默认条目分割线
        rvNews.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

        // 默认条目动画效果
        rvNews.setItemAnimator(new DefaultItemAnimator());

        // 设置支持上拉加载更多
        rvNews.setLoadingMoreEnabled(true);
        // 设置支持下拉刷新
        rvNews.setPullRefreshEnabled(true);

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值