Android---RecyclerView网络请求图片加载

本文介绍了Android中RecyclerView的基本使用,包括其作为强大滑动组件的特性,以及为何选择RecyclerView的原因。内容涵盖了RecyclerView的回收复用功能,适用于处理大量数据的高效显示。
摘要由CSDN通过智能技术生成

RecyclerView的基本使用


什么是RecyclerView

  recycleview是support-v7包中的新组件,是一个强大的滑动组件,从它的名字recyclerview可以看出它具有回收复用的功能。


为什么要使用RecyclerView (为什么使用RecyclerView)?

①RecylerView封装了viewholder的回收复用,也就是说RecylerView标准化了ViewHolder,编写Adapter面向的是 ViewHolder而不再是View了,复用的 逻辑被封装了,写起来更加简单。
②提供了一种插拔式的体验,高度的解耦,异常的灵活,针对一个Item的显示RecylerView专门抽取出了相应的类,来控制Item的显示,使其的扩展性非常强。例如recyclerview不局限与下拉列表,它还支持GridView效果和瀑布流效果
③可以控制Item增删的动画,可以通过ItemAnimator这个类进行控制,当然针对增删的动画,RecylerView有其自己默认的实现。
④能实现ListView、GridView、staggeredgridview 布局

如何使用RecyclerView?(我使用的是网络请求图片 本文参考了 http://blog.csdn.net/lmj623565791/article/details/45059587; 出自:【张鸿洋的博客】

RecyclerView基本使用代码(设置布局 、adapter、item动画、分割线)
   mRecyclerView = findView(R.id.id_recyclerview);
        //设置布局管理器
        mRecyclerView.setLayoutManager(layout);
        //设置adapter
        mRecyclerView.setAdapter(adapter)
        //设置Item增加、移除动画
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        //添加分割线
        mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); // 设置默认分割线
具体步骤
先看效果图

①导入依赖(在model的build.radle 中 dependencies 导入)
 //recyclerView的依赖
    compile 'com.android.support:mediarouter-v7:25.0.0'
    compile 'com.android.support:appcompat-v7:25.0.0'
    compile 'com.android.support:recyclerview-v7:25.0.0'
    //BufferKnife的依赖
    compile 'com.jakewharton:butterknife:7.0.1'
    //okhttp的依赖
    compile 'com.squareup.okio:okio:1.5.0'
    compile 'com.squareup.okhttp3:okhttp:3.2.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    //gson的依赖
    compile 'com.google.code.gson:gson:2.8.2'
    compile files('libs/universal-image-loader-1.9.3.jar')
② 在MainActivity写入一下代码
package com.dabin.www.recycleview01;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.widget.Toast;

import java.io.IOException;
import java.util.List;

import adpter.HomeAdapter;
import bean.NewBase;
import custom.DividerItemDecoration;
import okhttp3.Call;
import utils.GsonObjectCallback;
import utils.NetWorkUtils;
import utils.OkHttp3Utils;

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    HomeAdapter homeAdapter;
    List<NewBase.DataBean> data;
    private String path = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //判断网络状态
        boolean netWorkAvailable = NetWorkUtils.isNetWorkAvailable(this);
        if (!netWorkAvailable) {
            Toast.makeText(MainActivity.this, "联网:" + netWorkAvailable, Toast.LENGTH_SHORT).show();
        }
        //okhttp请求数据
        OkHttp3Utils.getInstance().doGet(path, new GsonObjectCallback<NewBase>() {
            @Override
            public void onUi(NewBase newBase) {
                data = newBase.getData();
                homeAdapter = new HomeAdapter(MainActivity.this, data);   //适配器 一定要写在刚得到数据之后
                mRecyclerView.setAdapter(homeAdapter);  // 设置适配器
                //设置点击事件 (接口回调)
                homeAdapter.setOnItemClickLitener(new HomeAdapter.OnItemClickLitener() {
                    @Override
                    //点击吐司
                    public void onItemClick(View view, int position) {
                        Toast.makeText(MainActivity.this, position + " click",
                                Toast.LENGTH_SHORT).show();
                    }

                    //长按吐司删除
                    @Override
                    public void onItemLongClick(View view, int position) {
                        Toast.makeText(MainActivity.this, position + " long click",
                                Toast.LENGTH_SHORT).show();
                        homeAdapter.removeData(position);
                    }
                });
            }
            @Override
            public void onFailed(Call call, IOException e) {

            }
        });

        mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);

        mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL));//设置StaggeredGridLayoutManager横向布局管理器(修改item布局就可以控制大小)

        //mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL)); // 设置默认分割线
        //mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST)); //自定义横向分割线

        // 设置item动画
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());



    }

    //添加
    public void add(View v) {
        homeAdapter.addData(1);
    }

    //删除
    public void delete(View v) {
        homeAdapter.removeData(1);
    }

    //线性布局
    public void Linears(View v) {
        mRecyclerView.se
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值