购物车之Recyclerview列表

使用到的依赖和jar包

RecyclerView依赖
compile 'com.android.support:recyclerview-v7:26.0.0+'
SpringView依赖
compile 'com.liaoinstan.springview:library:1.2.6'

OkHttp3的依赖
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.squareup.okio:okio:1.7.0'

OkHttp Log拦截
compile 'com.squareup.okhttp3:logging-interceptor:3.2.0'

还有下载的json和imageloard的jar包


首先创建MVP框架

1.model层

  

public class MainActivityModel {
    //提供对应的上拉下拉方法
    //up为true就是下拉刷新,为false就是上拉加载
    public void onfresh(boolean up, final ModelCallBack modelCallBack) {
        //拿封装好的网络请求数据,第一个参数map类型,不需要,第二个,请求路劲,第三个回调,泛型是你的bean指定类型
        OkhttpUtils.getInstance().asy(null, "http://120.27.23.105/product/getProducts?pscid=39&page=1", new AbstractUiCallBack<MyBean>() {
            @Override
            public void success(MyBean myBean) {
                //成功就调到数据了,然后要回调到presenter里
                modelCallBack.success(myBean);
            }

            @Override
            public void failure(Exception e) {
                modelCallBack.failure(e);
            }
        });
    }

    //创建回调接口
    public interface ModelCallBack {
        public void success(MyBean myBean);

        public void failure(Exception e);
    }
}

2.view层

public interface MainActivityView {
    //数据成功回调的方法,需要数据参数
    public void success(MyBean myBean);

    //失败,封装的接口(okhttp)里回调一个Exception
    public void fasle(Exception e);
}

3.p层

public class MainActivityPresenter {
    //实例model
    MainActivityModel mainActivityModel;
    //实例view
    MainActivityView mainActivityView;

    //构造方法
    public MainActivityPresenter(MainActivityView mainActivityView) {
        //view接口传过来他就持有MainActivityView,然后定义出来,构造
        this.mainActivityView = mainActivityView;
        this.mainActivityModel = new MainActivityModel();
    }

    //获取数据的方法,上拉刷新和下拉加载
    public void onfresh(boolean up) {
        mainActivityModel.onfresh(up, new MainActivityModel.ModelCallBack() {
            @Override
            public void success(MyBean myBean) {
                //通过view的接口往回调
                mainActivityView.success(myBean);
            }

            @Override
            public void failure(Exception e) {
                mainActivityView.fasle(e);
            }
        });

    }
}

二,适配器

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    //上下文和数据
    Context context;
    List<MyBean.DataBean> lists;

    //构造方法
    public RecyclerViewAdapter(Context context) {
        this.context = context;

    }

    //添加数据
    public void addbean(List<MyBean.DataBean> list) {
        if (lists==null){
            lists = new ArrayList<>();
        }
        lists.addAll(list);
        //更新数据
        notifyDataSetChanged();
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
        //返回对应的布局
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        //直接拿到
        ViewHolder viewHolder = (ViewHolder) holder;
        //做显示,拆分图片
        String[] split = lists.get(position).getImages().split("\\|");
        ImageLoader.getInstance().displayImage(split[0],holder.imageview);
        viewHolder.text1.setText(lists.get(position).getTitle());
        viewHolder.text2.setText(lists.get(position).getPrice()+"元");
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        private final ImageView imageview;
        private final TextView text1;
        private final TextView text2;

        public ViewHolder(View itemView) {
            super(itemView);
            //找到控件
            imageview = itemView.findViewById(R.id.imageview);
            text1 = itemView.findViewById(R.id.text1);
            text2 = itemView.findViewById(R.id.text2);
    }
    }
}


三,主布局和子布局

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.liaoinstan.springview.widget.SpringView
        android:id="@+id/springview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        </android.support.v7.widget.RecyclerView>
    </com.liaoinstan.springview.widget.SpringView>



</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:background="#fff"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/imageview"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_launcher"/>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
        <TextView
            android:text="XXXXXXXX"
            android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:text="XXXXXXXX"
            android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

四,Imageloard配置

public class MyApps extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration
                .Builder(this)
                .build();
        ImageLoader.getInstance().init(imageLoaderConfiguration);
        //然后要到清单文件中配置name和网络权限
    }
}

五,bean类拿给的接口去请求去创建


六,导入ok封装包和拦截器


七,anctivity

public class MainActivity extends AppCompatActivity implements MainActivityView {
    //初始化控件
    RecyclerView recyclerview;
    SpringView springview;
    private MainActivityPresenter mainActivityPresenter;
    private RecyclerViewAdapter recyclerViewAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件
        recyclerview = findViewById(R.id.recyclerview);
        springview = findViewById(R.id.springview);
        //获取数据,使用mvp模式,创建p层,实例化,presenter回调需要把当前的view接口传过去
        mainActivityPresenter = new MainActivityPresenter(this);
        //MainActivityPresenter回调view,需要定义一个view的接口

        //实例化适配器
        recyclerViewAdapter = new RecyclerViewAdapter(this);

        //布局管理器,一参上下文,二参方向
        LinearLayoutManager layoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        //给RecyclerView设置管理器
        recyclerview.setLayoutManager(layoutManager);
        //设置适配器
        recyclerview.setAdapter(recyclerViewAdapter);

        //springview添加头尾部
        springview.setHeader(new DefaultHeader(this));
        springview.setFooter(new DefaultFooter(this));

        //特别要注意springview的监听
        springview.setListener(new SpringView.OnFreshListener() {
            @Override
            public void onRefresh() {
                //实例化presenter调用precenter里的方法,precenter掉model
                mainActivityPresenter.onfresh(true);

            }

            @Override
            public void onLoadmore() {
                mainActivityPresenter.onfresh(false);
            }
        });
        //给一个默认显示
        mainActivityPresenter.onfresh(true);
    }

    @Override
    public void success(MyBean myBean) {
        //最后要显示数据,更新数据源

        if(springview != null){
            springview.onFinishFreshAndLoad();
        }
        recyclerViewAdapter.addbean(myBean.getData());
    }

    @Override
    public void fasle(Exception e) {
        Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值