Y_pulltorefresh

来源:互联网 发布:内蒙古大数据局局长 编辑:程序博客网 时间:2024/06/05 14:05
PullToRefresh是很多项目都使用的刷新加载框架,大多数情况下我们不需要对源码做任何调整,它提供的强大配置功能就足以满足我们的需求,而且框架已经相当稳定,正因如此受到大家的欢迎!


PullToRefresh需要和module进行绑定,步骤如下:

pullToRefresh的导入

首先,点击new按钮 -> import Module

然后在 New Module界面选择已经在本地的含有源代码的pullToRefresh。

打开如下图所示的open Module Settings 按钮

点击app中的Dependencies 中右边框的"+"按钮,选择第三个 ,如下所示

选择Modules : pullToRefreshLibrary ,点击OK
然后在build.gradle(Module:app)或者你自己要写的那个android 程序的根文件夹的build.gradle中加入下面一句话

compile project(':pullToRefreshLibrary')

自此,pullToRefresh已经导入成功,可以新建一个pullToRefrenshListView验证一下。


pullToRefreshListView的基本使用

布局文件:

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

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/refresh_list_view"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF"  >

    </com.handmark.pulltorefresh.library.PullToRefreshListView>

</LinearLayout>

,,,,,,,,,,,,,,,,listView的具体实现的代码

,,,,,,,,,先有一个主界面,然后再主界面中分出子布局(fragment)

package yaozhipu.bwei.com.week1.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

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

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import yaozhipu.bwei.com.week1.R;
import yaozhipu.bwei.com.week1.Utils.JsonCallBack;
import yaozhipu.bwei.com.week1.Utils.NetDataUtils;
import yaozhipu.bwei.com.week1.halper.DatadateBean;
import yaozhipu.bwei.com.week1.imag.ListViewAdapter;

/**
 * Created by lenovo on 2017/10/18.
 */

public class FragmentListView extends Fragment {

    private PullToRefreshListView refreshListView;
    private List<DatadateBean.DataBean.EssayBean> list = new ArrayList<>();
    private ListViewAdapter myAdapter;
    private int num=1;
    private ILoadingLayout startLabels;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.layout_listview, container, false);
        refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

//1.设置listView的适配器
        getDataFrom();

 //2.设置刷新模式
        /*设置pullToRefreshListView的刷新模式,BOTH代表支持上拉和下拉,PULL_FROM_END代表上拉,PULL_FROM_START代表下拉 */
        refreshListView.setMode(PullToRefreshBase.Mode.BOTH);

//3.通过getLoadingLayoutProxy 方法来指定上拉和下拉时显示的状态的区别
(也就是设置向下拉的时候头部里面显示的文字)
        //此时这里设置的是下拉刷新的时候显示的文字,所以第一个设置true表示现在是刷新,
第二个设置为false
        startLabels = refreshListView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新...");
        startLabels.setRefreshingLabel("正在刷新...");
        startLabels.setReleaseLabel("放开刷新...");
        ILoadingLayout endLabels = refreshListView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新...");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
//下拉刷新的时候调用的方法....请求第一页的数据,清空之前的数据,然后再添加设置适配器            
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
         //下拉刷新....请求第一页的数据,清空之前的数据,然后再添加设置适配器                
                   getReshData();
            }

//上拉刷新的时候调用的方法..page++,然后在请求数据
            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

//上拉刷新/加载...加载的时候页数++                
                num++;
                getDataFrom();
            }
        });
    }

    public void getDataFrom() {
        NetDataUtils.getData("http://v3.wufazhuce.com:8000/api/reading/index/?version=3.5.0&platform=android", getActivity(), new JsonCallBack() {

            @Override
            public void getJsonString(String json) {

                //解析
                Gson gson = new Gson();
                DatadateBean datadateBean = gson.fromJson(json, DatadateBean.class);

                Log.i("---",datadateBean.getData()+"---");
                list.addAll(datadateBean.getData().getEssay());

                setAdapter();
                refreshListView.onRefreshComplete();
            }
        });
    }

    private void setAdapter() {
        if (myAdapter == null){
            myAdapter = new ListViewAdapter(getActivity(), list);
            refreshListView.setAdapter(myAdapter);
        }else{
            myAdapter.notifyDataSetChanged();
        }
    }


    public void getReshData() {
        NetDataUtils.getData("http://v3.wufazhuce.com:8000/api/reading/index/?version=3.5.0&platform=android", getActivity(), new JsonCallBack() {

            @Override
            public void getJsonString(String json) {
                 //解析                 
                Gson gson = new Gson();
                DatadateBean datadateBean = gson.fromJson(json, DatadateBean.class);

               //先清空一下数据
                list.clear();
                
                 //添加到集合的最前边,,,,(0,,,,)
                 list.addAll(0,datadateBean.getData().getEssay());
                setAdapter();
                refreshListView.onRefreshComplete();

                startLabels.setLastUpdatedLabel("上次更新时间:"+new SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis())));
            }
        });
    }
}


、、、、、listView进行加载,并且 使用多条目,以及图片适配

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.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

import yaozhipu.bwei.com.week1.R;
import yaozhipu.bwei.com.week1.halper.DatadateBean;

/**
 * Created by lenovo on 2017/10/18.
 */

public class ListViewAdapter extends BaseAdapter{
    private Context context;
    private List<DatadateBean.DataBean.EssayBean> list;
    private int image1=0;
    private int image2=1;
    public ListViewAdapter(Context context, List<DatadateBean.DataBean.EssayBean> list) {
        this.context=context;
        this.list=list;
    }

    @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 int getItemViewType(int position) {
        if (position % 2==0){
            return image1;
        }
        return image2;
    }

    //返回2个布局文件
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    //优化,进行多条目加载
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (getItemViewType(position)==image1) {
            ViewHolder viewHolder = null;
            if (convertView == null) {
                viewHolder = new ViewHolder();
                convertView = View.inflate(context, R.layout.layout_list, null);
                viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
                viewHolder.title = (TextView) convertView.findViewById(R.id.title);
                viewHolder.tiem = (TextView) convertView.findViewById(R.id.time);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }

            viewHolder.tiem.setText(list.get(position).getHp_makettime());
            viewHolder.title.setText(list.get(position).getHp_title());
            ImageLoader.getInstance().displayImage(list.get(position).getStart_video(), viewHolder.image, ImageLOaderUtils.getcrioption());
        }else if (getItemViewType(position) == image2){
            Holder holder = null;
            if (convertView == null) {
                holder = new Holder();
                convertView = View.inflate(context, R.layout.layout_lists, null);
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.tiem = (TextView) convertView.findViewById(R.id.time);
                convertView.setTag(holder);
            } else {
                holder = (Holder) convertView.getTag();
            }

            holder.tiem.setText(list.get(position).getHp_makettime());
            holder.title.setText(list.get(position).getHp_title());
        }
        return convertView;
    }

    class ViewHolder{
        ImageView image;
        TextView title;
        TextView tiem;
    }
    class Holder{
        TextView title;
        TextView tiem;
    }
}


,,,,,,,,,,,,,,,示例如下
原创粉丝点击