Android PullToRefreshListView下拉上拉

先导个包:

由于截图的问题,并没有显示出要走的步骤,应走倒数第三个(Open Module Settings)点击后:

接下来就看主布局:

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

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       />

</LinearLayout>

pulltorefresh在写布局的时候代码是没有办法提醒的,所有必须的手敲

主类:

package com.example.happy;

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.squareup.picasso.Picasso;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private String u = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=";
    private int n = 1;
    private PullToRefreshListView pull;//****
    private List<item.DataBean> list = new ArrayList();
    private MyAdapter myAdapter;

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

        pull = findViewById(R.id.pull);
        pull.setMode(PullToRefreshBase.Mode.BOTH);//*****设置模式为上拉下滑都可用

        new MyTask().execute();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        myAdapter = new MyAdapter(list, this);

        pull.setAdapter(myAdapter);//****差不多就是listview的用法


        ILoadingLayout startLables = pull.getLoadingLayoutProxy(true, false);
        startLables.setPullLabel("下拉,下拉,下拉");//刚下拉时,显示的提示
        startLables.setRefreshingLabel("正在更新..");//刷新时
        startLables.setReleaseLabel("放开那个女孩,让我来");//下拉达到 一定的距离时,显示的文字
        startLables.setLoadingDrawable(getResources().getDrawable(R.mipmap.ic_launcher));//设置下拉旋转的图标

        ILoadingLayout endLables = pull.getLoadingLayoutProxy(false, true);
        endLables.setPullLabel("上拉上拉上拉啊~");
        endLables.setRefreshingLabel("正在更新>>");
        endLables.setReleaseLabel("放手也是一种爱.");
        endLables.setLoadingDrawable(getResources().getDrawable(R.mipmap.ic_launcher));//设置上拉旋转的图标

        pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            //下拉刷新
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                n = 1;
                list.clear();
                new MyTask().execute();
            }

            //下拉加载
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                n++;
                new MyTask().execute();
            }
        });

        //进行吐司
        pull.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, list.get(position - 1).getTitle(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    class MyTask extends AsyncTask<String, Intent, String> {
        //子线程,耗时操作
        @Override
        protected String doInBackground(String... strings) {
            StringBuffer stringBuffer = new StringBuffer();
            try {
                URL url = new URL(u + n);
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.connect();
                InputStream inputStream = urlConnection.getInputStream();
                byte[] bytes = new byte[1024];
                int length = 0;
                while ((length = inputStream.read(bytes)) != -1) {
                    stringBuffer.append(new String(bytes, 0, length));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return stringBuffer.toString();
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            pull.onRefreshComplete();
            item item = gson.fromJson(s, item.class);
            List<item.DataBean> data = item.getData();
            list.addAll(data);
            myAdapter.notifyDataSetChanged();
        }
    }
}

class MyAdapter extends BaseAdapter {
    private List<item.DataBean> list;
    private Context context;

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

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

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            //布局的优化
            convertView = LayoutInflater.from(context).inflate(R.layout.shipei, parent, false);
            //
            viewHolder.iv = convertView.findViewById(R.id.iv);
            viewHolder.tv = convertView.findViewById(R.id.tv);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        Picasso.with(context).load(list.get(position).getPic()).into(viewHolder.iv);
        viewHolder.tv.setText(list.get(position).getTitle());
        return convertView;
    }

    static class ViewHolder {
        ImageView iv;
        TextView tv;
    }
}

他跟listview的用法是一样的,主要的不同就在于:

猜你喜欢

转载自blog.csdn.net/LIXIAONA_1101/article/details/81253158
今日推荐