PullToRefreshListView上下拉&分页&多条目

本文详细介绍了如何使用PullToRefreshListView组件来实现上下拉刷新和分页加载功能,同时支持多种不同类型的列表条目展示,提升用户在浏览长列表时的交互体验。
在这里插入代码片


package frag;

import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.ListView;

import com.bawei.monthlx1.R;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import adapter.MyPullAdapter;
import base.BaseFragment;
import bean.Datas;
import bean.Json;

/**
 */
public class item1 extends BaseFragment {
    int page = 1;
    private PullToRefreshListView pull;
    private ArrayList list;

    @Override
    protected int layoutID() {
        return R.layout.item1;
    }

    @Override
    protected void initView(View view) {
        //初始化控件
        pull = view.findViewById(R.id.pull);
    }

    @Override
    protected void initData() {
        new MyAsyncTask().execute();
        pull.setMode(PullToRefreshBase.Mode.BOTH);
        //设置监听事件
        pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
        //下拉加载
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        pull.onRefreshComplete();
                    }
                },2000);
            }
	//上拉加载
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        page++;
                        new MyAsyncTask().execute();
                        pull.onRefreshComplete();
                    }
                },2000);

            }
        });
    }

    private class MyAsyncTask extends AsyncTask<String, Integer, String> {

        @Override
        protected String doInBackground(String... strings) {
            try {
                URL url = new URL("http://api.expoon.com/AppNews/getNewsList/type/1/p/1?page=" + page);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.setConnectTimeout(5000);
                urlConnection.setReadTimeout(5000);
                if (urlConnection.getResponseCode() == 200) {
                    InputStream stream = urlConnection.getInputStream();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
                    StringBuilder builder = new StringBuilder();
                    String string = "";
                    while ((string = reader.readLine()) != null) {
                        builder.append(string);
                    }
                    return builder.toString();

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            Json fromJson = gson.fromJson(s, Json.class);
            ArrayList<Datas> data = fromJson.getData();
            if (page==1){
                list=new ArrayList<>();
            }
            list.addAll(data);
            //设置适配器
            MyPullAdapter myPullAdapter = new MyPullAdapter(getActivity(), list);
            pull.setAdapter(myPullAdapter);
            pull.setSelection(list.size()-19);
        }
    }
}
--------------------------适配器---------------------------------
package adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.monthlx1.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

import bean.Datas;

/
 */
public class MyPullAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<Datas> data;

    public MyPullAdapter(Context context, ArrayList<Datas> data) {
        this.context = context;
        this.data = data;
    }
//返回几个页面(布局)
    @Override
    public int getViewTypeCount() {
        return 3;
    }
//根据条件返回某个布局
    @Override
    public int getItemViewType(int position) {
        if (position % 3 == 0) {
            return 0;
        } else if (position % 3 == 1) {
            return 1;
        } else {
            return 2;
        }
    }

    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        int type = getItemViewType(position);
        switch (type) {
            case 0:
                ViewHold1 viewHold1 = new ViewHold1();
                if (convertView == null) {
                    convertView = View.inflate(context, R.layout.pull1,null);
                    viewHold1.textView1 = convertView.findViewById(R.id.pulltext1);
                    viewHold1.imageView1 = convertView.findViewById(R.id.pullimg1);
                    convertView.setTag(viewHold1);
                }else {
                    viewHold1 = (ViewHold1) convertView.getTag();
                }
                viewHold1.textView1.setText(data.get(position).getNews_summary());
                ImageLoader.getInstance().displayImage(data.get(position).getPic_url(),viewHold1.imageView1);
                break;
            case 1:
                ViewHold2 viewHold2 = new ViewHold2();
                if (convertView == null) {
                    convertView = View.inflate(context, R.layout.pull2,null);
                    viewHold2.textView11 = convertView.findViewById(R.id.pulltext11);
                    convertView.setTag(viewHold2);
                }else {
                    viewHold2 = (ViewHold2) convertView.getTag();
                }
                viewHold2.textView11.setText(data.get(position).getNews_id());
                break;
            case 2:
                ViewHold3 viewHold3 = new ViewHold3();
                if (convertView == null) {
                    convertView = View.inflate(context, R.layout.pull3,null);
                    viewHold3.textView111 = convertView.findViewById(R.id.pulltext111);
                    viewHold3.imageView111 = convertView.findViewById(R.id.pullimg11);
                    convertView.setTag(viewHold3);
                }else {
                    viewHold3 = (ViewHold3) convertView.getTag();
                }
                viewHold3.textView111.setText(data.get(position).getNews_title());
                ImageLoader.getInstance().displayImage(data.get(position).getPic_url(),viewHold3.imageView111);
                break;
        }
        return convertView;
    }
    //优化
    class ViewHold1 {
        TextView textView1;
        ImageView imageView1;
    }

   class ViewHold2 {
        TextView textView11;
    }

    class ViewHold3 {
        TextView textView111;
        ImageView imageView111;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值