Android XRcyclerView刷新,加载更多

本文介绍了一个基于XRecyclerView的安卓应用实例,演示了如何通过OkHttp发起网络请求,并结合Gson进行数据解析,同时利用Universal Image Loader加载图片。文章详细展示了从依赖引入、权限配置、布局设计到代码实现的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:


1.导入依赖:

  /*xrecyclerview*/
    compile 'com.jcodecraeer:xrecyclerview:1.3.2'
//    imageolader
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//    logger日志的使用
    compile 'com.orhanobut:logger:2.1.1'
//    Okhttp请求以及Gson解析
    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'
    compile 'com.google.code.gson:gson:2.8.2'

2.权限:

 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

3.布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="xuejian.baway.com.MainActivity">

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/xRecyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.jcodecraeer.xrecyclerview.XRecyclerView>
</RelativeLayout>

4.子条目item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        />
    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="标题"
        />
</LinearLayout>

5.MainActivity代码:

public class MainActivity extends AppCompatActivity {

    String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?sign=C7548DE604BCB8A17592EFB9006F9265&pageSize=8&gender=2&ts=1871746850&page=";
    private XRecyclerView xRecyclerview;
    int page=1;
    private ArrayList<SuperClass.DataBean> list;

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

        xRecyclerview = (XRecyclerView) findViewById(R.id.xRecyclerview);
        //允许刷新,加载更多
        xRecyclerview.setPullRefreshEnabled(true);
        xRecyclerview.setLoadingMoreEnabled(true);
        list = new ArrayList<>();
        initView();
        //设置布局管理器
        xRecyclerview.setLayoutManager(new LinearLayoutManager(this));

    }

    private void initView() {
        xRecyclerview.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                Toast.makeText(MainActivity.this,"刷新...."+page,Toast.LENGTH_SHORT).show();
                list.clear();
                page=1;
                getData(path,1);
                xRecyclerview.refreshComplete();
            }

            @Override
            public void onLoadMore() {

                page++;
                Toast.makeText(MainActivity.this,"加载更多....第几页"+page,Toast.LENGTH_SHORT).show();
                getData(path,page);
                xRecyclerview.loadMoreComplete();
            }
        });
        if (page==1){
            getData(path,page);
        }
    }

    public void getData(String m,int p) {

        OkHttp3Utils.getInstance().doGet(m+p, new GsonObjectCallback<SuperClass>() {

            private List<SuperClass.DataBean> data;
            //ui操作
            @Override
            public void onUi(SuperClass superClass) {
                data = superClass.getData();
                //将请求到的数据添加到集合
                list.addAll(data);
                Toast.makeText(MainActivity.this,"请求到了"+list.size(),Toast.LENGTH_SHORT).show();
                MyAdapter myAdapter = new MyAdapter(MainActivity.this, list);
                if (myAdapter!=null){
                    xRecyclerview.setAdapter(myAdapter);
                }else{
                    Toast.makeText(MainActivity.this,"空的"+list.size(),Toast.LENGTH_SHORT).show();
                }
            }
            //失败
            @Override
            public void onFailed(Call call, IOException e) {

            }
        });
    }
}

6.适配器:

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{


    Context mcontext;
    ArrayList<SuperClass.DataBean>  mlist;

    public MyAdapter(Context mcontext, ArrayList<SuperClass.DataBean> mlist) {
        this.mcontext = mcontext;
        this.mlist = mlist;
    }

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

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ((MyViewHolder)holder).title.setText(mlist.get(position).getTitle());
        ImageLoader.getInstance().displayImage(mlist.get(position).getImg(), ((MyViewHolder)holder).img);
    }


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


    class MyViewHolder extends RecyclerView.ViewHolder{

        public ImageView img;
        public TextView title;

        public MyViewHolder(View itemView) {
            super(itemView);
            img = (ImageView) itemView.findViewById(R.id.img);
            title = (TextView) itemView.findViewById(R.id.title);
        }
    }
}

7.此处用到的ImageLoader自己建个MyApp:

不要忘了在清单文件里边注册myapp;

public class MyApp extends Application{

        public static MyApp mInstance;

        @Override
        public void onCreate() {
            super.onCreate();
            mInstance=this;//初始化imageLoader
            ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(getApplicationContext());
            ImageLoader.getInstance().init(configuration);
        }
        public static MyApp getInstance() {
            return mInstance;
        }
}
 ps:此处用到的okhttp3utils工具类:关于XRecyclerview可以看这里:http://www.jcodecraeer.com/a/opensource/2015/1126/3723.html


 









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值