zoukankan      html  css  js  c++  java
  • 【Android】使用 SwipeRefreshLayout 实现下拉刷新

    今天在codepath 上看到一个开源项目 [点击查看]使用到了 SwipeRefreshLayout 实现了下拉刷新,但演示样例并不完整,于是自己就动手写了下.之前看到郭霖的博客上也有介绍下拉刷新,只是他是纯手动实现的,代码量大,较为繁琐.[点击查看]而使用Android 提供的SwipeRefreshLayout 则大大降低了我们的工作量,当然,学会了使用SwipeRefreshLayout之后还是建议去看看如何不借助SwipeRefreshLayout从零開始实现"下拉刷新".


    SwipeRefreshLayout is a ViewGroup that can hold only one scrollable view as a child. This can be either a ScrollView or anAdapterView such as a ListView.

    Note: This layout only exists within more recent versions of support-v4 as explained in this post. Edit your app/build.gradlefile to include a support library later than version 19:

    要注意的是 SwipeRefreshLayout 在 Android 4.4.2(API 19) 的版本号才得到支持,因此在建project的时候最低版本号要选 19 之后的.

    先看效果:

                  

    接下来我就直接上代码了. [当中用到的图片能够下载源代码,图片均包括在里面]

    布局文件(XML)[activity_main.xml]:

    里面就一个ListView,也不要有其它多余的东西

    <android.support.v4.widget.SwipeRefreshLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/swipeContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ListView
            android:layout_marginTop="30dp"
            android:id="@+id/list_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" >
        </ListView>
    
    
    </android.support.v4.widget.SwipeRefreshLayout>



    MainActivity 代码:


    package com.demo.mummyding.learnswiperefreshlayout;
    
    import android.app.Activity;
    import android.os.Handler;
    import android.support.v4.widget.SwipeRefreshLayout;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    import org.json.JSONArray;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 这里要实现 OnRefreshListener 接口
     */
    public class MainActivity extends Activity implements SwipeRefreshLayout.OnRefreshListener{
        private SwipeRefreshLayout swipeContainer;
        ListView listView;
        List<viewItem> list;
        itemAdapter adapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            init();
        }
    
        /**
         * 下来刷新就会触发运行此方法
         */
        @Override
        public void onRefresh() {
            /**
             * 用Handler().postDelayed 延迟运行
             * 当然,不用延迟也能够,我这里是为了看效果,由于这里刷新哗的一下就没了~
             */
             new Handler().postDelayed(new Runnable() {
                 @Override
                 public void run() {
                     list.clear();
                     addItems();
                     adapter.notifyDataSetChanged();
                     swipeContainer.setRefreshing(false);
                 }
             }, 1000);
    
            /*
            不用延迟能够直接像以下这样写
             */
            /*
            *  list.clear();
                     addItems();
                     adapter.notifyDataSetChanged();
                     swipeContainer.setRefreshing(false);
                     */
        }
    
        /**
         * 初始化变量&加入事件监听
         */
        void init(){
            listView = (ListView) findViewById(R.id.list_view);
            swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
            swipeContainer.setOnRefreshListener(this);
            list = new ArrayList<viewItem>();
            adapter = new itemAdapter(this,R.layout.view_layout,list);
            listView.setAdapter(adapter);
        }
    
        /**
         * 向ListView加入Item  以下的Item 能够多复制几遍~_~
         */
        void addItems(){
            viewItem addItem = new viewItem("Aaron");
            list.add(addItem);
            addItem = new viewItem("Barton");
            list.add(addItem);
            addItem = new viewItem("Beacher");
            list.add(addItem);
            addItem = new viewItem("Colbert");
            list.add(addItem);
            addItem = new viewItem("Dick");
            list.add(addItem);
            addItem = new viewItem("Gregary");
            list.add(addItem);
            addItem = new viewItem("Francis");
            list.add(addItem);
            addItem = new viewItem("Fitch");
            list.add(addItem);
            addItem = new viewItem("Gordon");
            list.add(addItem);
            addItem = new viewItem("Eugene");
            list.add(addItem);
            addItem = new viewItem("Gregary");
            list.add(addItem);
            addItem = new viewItem("Francis");
            list.add(addItem);
            addItem = new viewItem("Fitch");
            list.add(addItem);
            addItem = new viewItem("Gordon");
            list.add(addItem);
            addItem = new viewItem("Eugene");
            list.add(addItem);
            addItem = new viewItem("Gregary");
            list.add(addItem);
            addItem = new viewItem("Francis");
            list.add(addItem);
            addItem = new viewItem("Fitch");
            list.add(addItem);
            addItem = new viewItem("Gordon");
            list.add(addItem);
            addItem = new viewItem("Eugene");
            list.add(addItem);
            addItem = new viewItem("Gregary");
            list.add(addItem);
            addItem = new viewItem("Francis");
            list.add(addItem);
            addItem = new viewItem("Fitch");
            list.add(addItem);
            addItem = new viewItem("Gordon");
            list.add(addItem);
            addItem = new viewItem("Eugene");
            list.add(addItem);
            addItem = new viewItem("Gregary");
            list.add(addItem);
            addItem = new viewItem("Francis");
            list.add(addItem);
            addItem = new viewItem("Fitch");
            list.add(addItem);
            addItem = new viewItem("Gordon");
            list.add(addItem);
            addItem = new viewItem("Eugene");
            list.add(addItem);
            addItem = new viewItem("Gregary");
            list.add(addItem);
            addItem = new viewItem("Francis");
            list.add(addItem);
            addItem = new viewItem("Fitch");
            list.add(addItem);
            addItem = new viewItem("Gordon");
            list.add(addItem);
            addItem = new viewItem("Eugene");
            list.add(addItem);
        
        }
    
    }
    



    接下来是两个类 Item类 和Adapter类[这就属于ListView的的基本使用方法了] 里面做了优化


    package com.demo.mummyding.learnswiperefreshlayout;
    
    /**
     * Created by mummyding on 15-7-20.
     */
    public class viewItem {
        private String itemName;
    
        public String getItemName() {
            return itemName;
        }
    
        public viewItem(String itemName) {
            this.itemName = itemName;
        }
    }
    

    package com.demo.mummyding.learnswiperefreshlayout;
    
    import android.content.Context;
    import android.text.Layout;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    
    import java.util.List;
    
    /**
     * Created by mummyding on 15-7-20.
     */
    public class itemAdapter extends ArrayAdapter<viewItem> {
    
    
        public itemAdapter(Context context, int resource, List<viewItem> objects) {
            super(context, resource, objects);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view;
            ViewHolder viewHolder;
            viewItem item = getItem(position);
            if(convertView == null){
               view = LayoutInflater.from(getContext()).inflate(R.layout.view_layout, null);
                viewHolder = new ViewHolder();
                viewHolder.name = (TextView) view.findViewById(R.id.tv_Name);
                viewHolder.name.setText(item.getItemName());
                view.setTag(viewHolder);
            }else{
                view = convertView;
                viewHolder = (ViewHolder) convertView.getTag();
                viewHolder.name.setText(item.getItemName());
            }
    
            return view;
        }
    
        /**
         * 为了降低getView方法中 findViewById 调用次数 而加入的一个辅助类.
         */
        class ViewHolder{
            TextView name;
        }
    }
    

    最后另一个Item View的局部文件[view_layout.xml]

    <?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">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/iv_Uers"
                android:layout_width="60dp"
                android:layout_height="50dp"
                android:layout_marginLeft="10dp"
                android:background="@drawable/user"
                />
            <TextView
                android:id="@+id/tv_Name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/iv_Uers"
                android:gravity="center"
                android:layout_centerInParent="true"
                />
        </RelativeLayout>
    
    </LinearLayout>
    


    完整代码:https://github.com/MummyDing/SwipeRefreshLayout

    【转载请注明出处】

    Author: MummyDing

    出处:http://blog.csdn.net/mummyding/article/category/5651761



  • 相关阅读:
    ORA-06553:PLS-306:wrong number or types of arguments in call to ''
    ORA-06577:output parameter not a bind variable
    CSS3之边框属性border
    Linux_LAMP 最强大的动态网站解决方案
    Linux_LAMP 最强大的动态网站解决方案
    Field BSEG-MWSKZ . does not exist in the screen SAPMF05A 0300 Message no. 00349
    mysql group by
    perl 解析JSON
    数组的数组 散列的散列
    HTTP Cookies
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7121672.html
Copyright © 2011-2022 走看看