Android官方刷新组件 SwipeRefreshLayout 的使用 - Go语言中文社区

Android官方刷新组件 SwipeRefreshLayout 的使用


我相信有许多还在用XListView,我感觉很老了,Android最新集成了一个官方下拉刷新组件,使用之后,感觉给人眼前一亮,非常好看,

我本人也很喜欢,那么Android官方集成的一个组件叫什么?相信大家都应该知道了,那就是SwipeRefreshLayout ,好了,不多说了,

下面我们就先来看看官方API:


这里方法很多,我们就先调几个常用的说说:

1、isRefreshing() 这个方法不多说了,大家看方法名字就能知道他是来干什么的,而且还是个boolean,自然就不用多说了。

2、setColorScheme():

这个方法要说一下,这个是用来设置下拉刷行圆圈旋转的颜色的,不过这个方法已经过时,被setColorSchemeResuorces替代了。

3、setOnRefreshListener():

这个方法看方法名字也能一眼就能看出来,他是用来设置刷新监听的,没错,就是的

4、setRefreshing()方法:

这个方法是用来设置加载动画是否可见,也可以说是控制加载动画的显示。

好了,上面基本常用的API就是这些了,不过很遗憾,这个控件并没有实现上拉刷新,不过你可以通过监听ListView的滚动,来显示Loading动画,你说对吧,不过,我发现Google太不应该了,做事只做一半,也不知道为什么?我也无力吐槽了。

当然Google官方也提供了V4兼容低版本的包,来保证低版本也可以使用,这个真心很棒,必须要给个赞,你们说对不对?下面我会给出这个控件的介绍图:

    

上面介绍完了控件的介绍以及API的介绍,下面我们就开始来看看如何实现了:

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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="com.qhb.refreshdemo.MainActivity">

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/srlView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ListView
            android:id="@+id/myListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </ListView>
    </android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
ListView中item代码:

<?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">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:padding="15dp"
        android:text="哈哈"/>

</LinearLayout>
实现代码:

public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {

    private static final int REFRESH_COMPLETE = 2015;
    private SwipeRefreshLayout srlView;
    private ListView myListView;
    private MyAdapter myAdapter;
    private List<String> item = new ArrayList<String>(Arrays.asList("Java", "Javascript", "C++", "Ruby", "Json",
            "HTML"));
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {

            switch (msg.what){
                case REFRESH_COMPLETE:{
                    item.addAll(Arrays.asList("Android","iOS","乔布斯","Objective-C"));
                    myAdapter.notifyDataSetChanged();
                    srlView.setRefreshing(false);
                }
                    break;
            }

        }
    };

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

        srlView = (SwipeRefreshLayout) findViewById(R.id.srlView);
        myListView = (ListView) findViewById(R.id.myListView);
        myAdapter = new MyAdapter(item);
        myListView.setAdapter(myAdapter);
        srlView.setOnRefreshListener(this);//设置下拉刷新监听,很遗憾,这个并没有为你实现上拉刷新
        srlView.setColorSchemeResources(R.color.colorPrimary,R.color.colorAccent,R.color.colorPrimaryDark,R.color.colorRed,R.color.colorGreen);
        //srlView.setColorScheme();已过时,被上面setColorSchemeResources替代

    }

    @Override
    public void onRefresh() {

        handler.sendEmptyMessageDelayed(REFRESH_COMPLETE,3000);


    }


    class MyAdapter extends BaseAdapter{

        private List<String> list;

        public MyAdapter(List<String> list){
            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 View getView(int position, View convertView, ViewGroup parent) {

            ViewHoler viewHoler;
            if(convertView == null){
                convertView = View.inflate(MainActivity.this,R.layout.item_layout,null);
                viewHoler = new ViewHoler();
                viewHoler.tvTitle = (TextView) convertView.findViewById(R.id.tvTitle);
                convertView.setTag(viewHoler);
            }else{
                viewHoler = (ViewHoler) convertView.getTag();
            }


            viewHoler.tvTitle.setText(list.get(position));

            return convertView;
        }


        class ViewHoler{
            TextView tvTitle;
        }


    }
}


好了,下面再来一张实现效果图:

                                                                   

好了,很晚了,今天就到这里,每天都很累,如有不好的地方还望各位多多包含,多多指证,欢迎拍砖、吐槽!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u012835497/article/details/50415857
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:40:00
  • 阅读 ( 1268 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢