PullToRefresh

页面刷新的实现思路,思考有没有更简洁的实现方式?

PullToRefresh概念:
开发者可以使用 PullToRefresh 对各种控件实现下拉刷新或者上拉加载以及可以自定义刷新和加载部分的视图。

PullToRefresh应用场景:
目前支持:ScrollView,ListView,WebView,RecyclerView 如图所示:
添加 Gradle 依赖
目前只支持 Android Studio,最新版本可到GitHub上查看

compile 'com.jwenfeng.pulltorefresh:library:1.0.3'
在Moudle中添加PullToRefresh的library,最新版本可到GitHub上查看
网址如下:
https://github.com/chrisbanes/Android-PullToRefresh
下载后解压并添加到工作空间中
添加pulltorefresh的布局
<?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
        android:id="@+id/pull"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:cacheColorHint="#00000000"
        android:divider="#19000000"
        android:dividerHeight="4dp"
        android:fadingEdge="none"
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:smoothScrollbar="true" />

</LinearLayout>
//gridviewd的布局
<com.handmark.pulltorefresh.library.PullToRefreshGridView
        android:id="@+id/pull_refresh_grid"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:columnWidth="100dp"
        android:gravity="fill"
        android:horizontalSpacing="1dp"
        android:numColumns="2"
        android:stretchMode="columnWidth"
        android:verticalSpacing="1dp" />


-------------------------------------------------------
java代码://
private ImageLoader imginstance;
private List<Data.DataBean> list = new ArrayList<>();
private PullToRefreshListView pull;
private MyAdapter myAdapter;
private String urlstr = "http://www.93.gov.cn/93app/data.do?channelId=0&startNum=";
private int i = 0;

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.childfragment, container, false);
        pull = view.findViewById(R.id.pull);
        imginstance = ImageLoader.getInstance();//图片框架
        ListView refreshableView = pull.getRefreshableView();
        refreshableView.addHeaderView(view);//添加自定义头布局
        pull.setMode(PullToRefreshBase.Mode.BOTH);//允许上下拉
        //添加滑动监听事件
        pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
                @Override//下拉刷新
                public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                    list.clear();//清空数据
                    getNetData(0);//重新请求
                }

                @Override//上拉加载
                public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                    //加载更多
                    getNetData(i++);
                }
            });
            myAdapter = new MyAdapter();
            pull.setAdapter(myAdapter);//添加适配器
        return view;
    }
//请求数据
private void getNetData(int num) {
        new GetDataAsynctask().execute(urlstr + num);
    }
//请求数据的asynctask
private class GetDataAsynctask extends AsyncTask<String, Void, String> {
        //此方法在子线程中运行,主要执行联网操作
        //String  可变参数
        @Override
        protected String doInBackground(String... strings) {
            String urltemp = strings[0];
            //使用utils解析json
            String getmsg = Utils.getmsg(urltemp);
            //把转换的json串返回给前台方法
            return getmsg;
        }

        /**
         * 此方法在主线程中直接更新ui
         * String s  是doinbackground方法转换的json
         */

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //实例化gson对象
            Gson gson = new Gson();
            //解析json数据
            Data data = gson.fromJson(s, Data.class);
            //封装进集合
            List<Data.DataBean> data1 = data.getData();
            //添加进 另一个集合
            list.addAll(data1);
            //刷新适配器
            myAdapter.notifyDataSetChanged();
            //更新UI
            pull.onRefreshComplete();
        }
    }
//适配器
private class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return list.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) {
            if (convertView == null) {
                convertView = View.inflate(getActivity(), R.layout.pulllistview, null);
            }
            ImageView img1 = convertView.findViewById(R.id.img1);
            TextView title1 = convertView.findViewById(R.id.title1);
            imginstance.displayImage(list.get(position).getIMAGEURL(), img1);
            title1.setText(list.get(position).getTITLE());
            return convertView;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值