锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

pulltorefresh_demo2

时间:2023-01-25 07:30:00 1808zj圆形连接器1407zj圆形连接器

MainActivity 
package news1510a.bawei.com.a16_pulltorefresh_demo;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.util.ArrayList;import java.util.List;import news1510a.bawei.com.a16_pulltorefresh_demo.fragment.FragmentGridView;import news1510a.bawei.com.a16_pulltorefresh_demo.fragment.FragmentListView;import news1510a.bawei.com.a16_pulltorefresh_demo.fragment.FragmentScrollView;/** * 使用pullToRefresh下拉刷新和上拉加载 * 1.去github上下载压缩包,解压library复制改名,最好不要有中文路径 * 2.使用import moundle导入库文件,添加库文件依赖 * 3.此时左下角可能报错,只需点击即可install...下载16版sdk,还需要下载19版本的buildTools * * 可以看到代码 * PullToRefreshListView可以刷新的listView控件...间接继承了LinearLayout,是自定义的listView * PullToRefreshGridView可以刷新的GridView控件 * PullToRefreshExpandableListView二级列表控件可以刷新 * PullToRefreshScrollView可以刷新的ScrollView控件 * PullToRefreshWebView可以刷新的WebView控件 */public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; private List list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabLayout = (TabLayout) findViewById(R.id.tl_tab); viewPager = (ViewPager) findViewById(R.id.view_pager); list = new ArrayList<>(); list.add("ListView"); list.add("GridView"); list.add("ScrollView"); viewPager.setOffscreenPageLimit(list.size()); //1.设置适配器...fragmnePagerAdapter...getChildFragmentManager...getFragmentManager viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { //2.重写方法...返回的是viewPager当前页的标题 @Override public CharSequence getPageTitle(int position) { return list.get(position); } @Override public Fragment getItem(int position) { //0...listView,1...gridView,2..scrollView Fragment fragment = null; switch (position){ case 0: fragment = new FragmentListView(); break; case 1: fragment = new FragmentGridView(); break; case 2: fragment = new FragmentScrollView(); break; default: break; } return fragment; } @Override public int getCount() { return list.size(); } }); //3.tablayout与viewPager关联使用 tabLayout.setupWithViewPager(viewPager); }}
————————————————————————————————————————————————————
activity_main.xml
————————————————————————————————————————————————————
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <android.support.design.widget.TabLayout
        android:id="@+id/tl_tab"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        app:tabGravity="center"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/colorPrimaryDark"
        app:tabTextColor="@color/colorPrimary" />

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    android.support.v4.view.ViewPager>



LinearLayout>
——————————————————————————————————————————
FragmentListView
——————————————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
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 news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.ListViewAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.dao.JsonDao;
import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.NetDataUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class FragmentListView extends Fragment {

    private PullToRefreshListView refreshListView;
    private List list = new ArrayList<>();//记录当前展示的所有数据
    private ListViewAdapter listViewAdapter;
    private int page_num = 1;
    private ILoadingLayout startLabels;
    private JsonDao jsonDao;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_listview_layout,container,false);


        refreshListView = view.findViewById(R.id.refresh_list_view);

        return view;
    }

    /**
     * 使用数据库做一个数据的缓存
     * @param savedInstanceState
     */
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        jsonDao = new JsonDao(getContext());
        //1.先读取数据库中存的数据....有数据,解析展示....无数据,网络获取数据
        String json = jsonDao.getJson("http://gank.io/api/data/Android/10/" + page_num);
        if (json != null){
            //解析 显示

            Gson gson = new Gson();

            DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

            //往后面添加...
            list.addAll(dataDataBean.getResults());

            //设置适配器
            setAdapter();

        }else {
            //1.设置listView的适配器
            getDataFromNet();
        }




        //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("放开刷新...");


        //4.设置监听事件
        /**
         * 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、
         * onPullUpToRefresh()两个方法。
         如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,
         同时实现onRefresh()方法。
         当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法,
         Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法
         */
        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
            //下拉刷新的时候调用的方法....请求第一页的数据,清空之前的数据,然后再添加设置适配器
            @Override
            public void onPullDownToRefresh(PullToRefreshBase refreshView) {
                //下拉刷新....请求第一页的数据,清空之前的数据,然后再添加设置适配器
                getRefreshData();


            }

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

                //上拉刷新/加载...加载的时候页数++
                page_num++;
                getDataFromNet();


            }
        });

    }

    /**
     * 下拉刷新获取数据
     */
    private void getRefreshData() {
        NetDataUtil.getData("http://gank.io/api/data/Android/10/1", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
                //先清空一下数据
                list.clear();

                //添加到集合的最前边,,,,(0,,,,)
                list.addAll(0,dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //设置适配器之后停止刷新的操作
                refreshListView.onRefreshComplete();

                //可以设置刷新的时间....
                startLabels.setLastUpdatedLabel("上次更新时间:"+new SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis())));//last最近的,最后一次update修改/更新
            }
        });

    }


    /**
     * 刚开始进入页面获取网络数据....还可以作为上拉加载获取数据的操作
     *
     *
     */
    private void getDataFromNet() {
        //第一个参数是接口,第二个上下文,第三个回调json数据
        NetDataUtil.getData("http://gank.io/api/data/Android/10/"+page_num, getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {

                //先存入数据库
                jsonDao.insertJson(json,"http://gank.io/api/data/Android/10/"+page_num);

                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

                //往后面添加...
                list.addAll(dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //停止刷新
                refreshListView.onRefreshComplete();
            }
        });

    }

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

    }
}
————————————————————————————————————————————————
FragmentGridView
————————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.fragment;

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

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

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

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.GridViewAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.NetDataUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 */
public class FragmentGridView extends Fragment {

    private PullToRefreshGridView refreshGridView;
    private int page_num = 1;
    private List list = new ArrayList<>();//记录当前展示的所有数据
    private ILoadingLayout startLabels;
    private GridViewAdapter gridViewAdapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_gridview_layout,container,false);

        refreshGridView = view.findViewById(R.id.refresh_grid_view);

        return view;
    }

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

        //1.默认的获取第一页的数据,然后设置适配器
        getDataFromNet();

        //2.设置可以刷新的模式
        refreshGridView.setMode(PullToRefreshBase.Mode.BOTH);

        //3.设置刷新的时候展示的文字(状态)
        startLabels = refreshGridView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新");
        startLabels.setRefreshingLabel("正在刷新...");
        startLabels.setReleaseLabel("放开刷新");
        ILoadingLayout endLabels = refreshGridView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        //4.设置下拉和上拉刷新的监听事件
        refreshGridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase refreshView) {
                //下拉刷新....请求第一页的数据,清空之前的数据,然后再添加设置适配器
                getRefreshData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase refreshView) {
                //上拉刷新/加载...加载的时候页数++
                page_num++;
                getDataFromNet();
            }
        });

    }

    /**
     * 下拉刷新获取数据
     */
    private void getRefreshData() {
        NetDataUtil.getData("http://gank.io/api/data/Android/10/1", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
                //先清空一下数据
                list.clear();

                //添加到集合的最前边,,,,(0,,,,)
                list.addAll(0,dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //设置适配器之后停止刷新的操作
                refreshGridView.onRefreshComplete();

                //可以设置刷新的时间....
                startLabels.setLastUpdatedLabel("上次更新时间:"+new SimpleDateFormat("HH:mm").format(new Date(System.currentTimeMillis())));//last最近的,最后一次update修改/更新
            }
        });

    }

    /**
     * 刚开始进入页面获取网络数据....还可以作为上拉加载获取数据的操作
     *
     *
     */
    private void getDataFromNet() {
        //第一个参数是接口,第二个上下文,第三个回调json数据
        NetDataUtil.getData("http://gank.io/api/data/Android/10/"+page_num, getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {

                //解析
                Gson gson = new Gson();

                DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);

                //往后面添加...
                list.addAll(dataDataBean.getResults());

                //设置适配器
                setAdapter();

                //停止刷新
                refreshGridView.onRefreshComplete();
            }
        });

    }

    /**
     * 设置适配器的方法
     */
    private void setAdapter() {
        if (gridViewAdapter == null){

            gridViewAdapter = new GridViewAdapter(getActivity(),list);
            refreshGridView.setAdapter(gridViewAdapter);

        }else {
            gridViewAdapter.notifyDataSetChanged();
        }
    }
}
————————————————————————————————————————————
FragmentScrollView
——————————————————————————————————————————————
package news1510a.bawei.com.a16_pulltorefresh_demo.fragment;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.ScrollView;

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

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

import news1510a.bawei.com.a16_pulltorefresh_demo.R;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.ListViewAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.adapter.ViewPagerAdapter;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.DataDataBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.bean.LunBoBean;
import news1510a.bawei.com.a16_pulltorefresh_demo.inter.JsonCallBack;
import news1510a.bawei.com.a16_pulltorefresh_demo.util.NetDataUtil;

/**
 * @author Dash
 * @date 2017/10/18
 * @description:
 *
 * 使用可以刷新的ScrollView
 *
 * 1.scrollView里面嵌套listView的时候出现了一种现象,,,只展示一个条目,改变高度的时候可以展示出来其他的,但是还不全
 * 2.自定义一个listView,主要是重写onMeasure方法,,,,重新测量高度
 * 3.ListView自动抢夺焦点,,,需要使用代码把焦点取消
 *
 */
public class FragmentScrollView extends Fragment {

    private PullToRefreshScrollView refreshScrollView;
    private ViewPager viewPager;
    private ListView listView;
    private List list = new ArrayList<>();//记录当前展示的所有数据
    private int page_num = 1;
    private ListViewAdapter listViewAdapter;
    private ILoadingLayout startLabels;
    private List imageUrlList;

    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0){
                //显示下一页....拿到当前页+1
                viewPager.setCurrentItem(viewPager.getCurrentItem() +1);

                //再次发送消息
                handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_scroll_layout, container, false);

        refreshScrollView = view.findViewById(R.id.refresh_scroll_view);
        viewPager = view.findViewById(R.id.image_view_pager);
        listView = view.findViewById(R.id.scroll_list_view);

        return view;
    }

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

        //失去焦点
        listView.setFocusable(false);


        //轮播图
        lunBoTu();

        //listView展示数据
        //1.获取网络数据,,,展示在listView上
        getDataFromNet();

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

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

        ILoadingLayout endLabels = refreshScrollView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        /**
         * 监听事件
         */
        refreshScrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase refreshView) {
                getRefreshData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase refreshView) {
                page_num++;
                getDataFromNet();
            }
        });


    }

    /**
     * 轮播图的方法
     */
    private void lunBoTu() {
        NetDataUtil.getData("http://v3.wufazhuce.com:8000/api/reading/index/?version=3.5.0&platform=android", getActivity(), new JsonCallBack() {
            @Override
            public void getJsonString(String json) {
                //这个结合记录轮播图的所有地址
                imageUrlList = new ArrayList();

                //解析数据
                Gson gson = new Gson();

                LunBoBean lunBoBean = gson.fromJson(json, LunBoBean.class);

                List essay = lunBoBean.getData().getEssay();

                for (LunBoBean.DataBean.EssayBean essayBean: essay) {
                    //essayBean.getAuthor().get(0).getWeb_url()
                    imageUrlList.add(essayBean.getAuthor().get(0).getWeb_url());
                }

                //此时应该根据图片的路径,加载图片,设置适配器
                ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getActivity(), imageUrlList);
                viewPager.setAdapter(viewPagerAdapter);

                //1.手动可以无限滑动....maxValue....把当前开始展示的位
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章