Android-Google公式ドロップダウンSwipeRefreshLayout(アップロード追加)

7036 ワード

Demo_SwipeRefreshLayout
転載は住所を明記してください.http://blog.csdn.net/skyunicorn/article/details/51802724
ドロップダウン・リフレッシュはシステムのコントロールですが、このコントロール自体にアップロードはありません.アップロードはListViewのAdapterで設定する必要があります.
V 4パッケージのサポートが必要です
compile 'com.android.support:support-v4:23.4.0'
レイアウト



    


コード設定
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.srl);
//       ,   
swipeRefreshLayout.setOnRefreshListener(this);
  //          
//        swipeRefreshLayout.setProgressBackgroundColor(R.color.colorAccent);
        //          ,        
        swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark);

上書きonRefresh()メソッド
//       
@Override
public void onRefresh()
{
    initBDatas();
    //        
    mSwipeRefreshLayout.setRefreshing(false);
}

RecyclerViewのスライドリスニングをメイン関数に追加
// RecyclerView       
    private RecyclerView.OnScrollListener mOnScrollListener = new RecyclerView.OnScrollListener()
    {
        private int lastVisibleItem;

        //       
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState)
        {
            super.onScrollStateChanged(recyclerView, newState);
            /**
             * scrollState     ,   SCROLL_STATE_IDLE、SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING
             * SCROLL_STATE_IDLE         
             * SCROLL_STATE_TOUCH_SCROLL                          
             * SCROLL_STATE_FLING                 ,         
             */
            if (newState == RecyclerView.SCROLL_STATE_IDLE
                    && lastVisibleItem + 1 == mAdapter.getItemCount()
                    && mAdapter.isShowFooter())
            {

                //       
                initAData();
//                LogUtils.d(TAG, "loading more data");
//                mNewsPresenter.loadNews(mType, pageIndex + Urls.PAZE_SIZE);
            }
        }

        //     
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy)
        {
            super.onScrolled(recyclerView, dx, dy);
            //  lastVisibleItem  
            // findLastVisibleItemPosition()       item   
            lastVisibleItem = mLayoutManager.findLastVisibleItemPosition();
        }
    };

アップロード、Adapterでレイアウトを2セット設定、デフォルトのitemレイアウト、ボトムロードの表示レイアウト
package com.demo.demo_swiperefreshlayout;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;

/**
 * Created by YangJW on 2016/7/1 09:37.
 */
public class MyAdapter extends RecyclerView.Adapter
{

    //       
    private static final int TYPE_FOOTER = 0;
    //       
    private static final int TYPE_DEFAULT = 1;

    //    
    private List mData;
    //    
    private Context mContext;
    //          item,   true
    private boolean mShowFooter = true;

    //     
    public MyAdapter(Context mContext)
    {
        this.mContext = mContext;
    }

    //        
    public void setData(List Data)
    {
        this.mData = Data;
        this.notifyDataSetChanged();
    }

    //      item
    @Override
    public int getItemViewType(int position)
    {
        //       +1         (     0    ),           ,         
        if (position + 1 == getItemCount())
        {
            return TYPE_FOOTER;
        } else
        {
            return TYPE_DEFAULT;
        }
    }

    //     (     convertView)
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {

        if (viewType == TYPE_DEFAULT)
        {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item, parent, false);

            DefaultViewHolder vh = new DefaultViewHolder(v);

            return vh;
        } else
        {
            //      
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.footer, null);
            //         
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT));

            return new FooterViewHolder(view);
        }
    }



    //         (    )
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
    {
        //                 
        if (holder instanceof DefaultViewHolder)
        {
            String str = mData.get(position);

            if (str == null)
            {
                return;
            }

            ((DefaultViewHolder) holder).tv.setText(str);
        }
    }

    //       
    @Override
    public int getItemCount()
    {
        //          ,    1,    0
        int begin = mShowFooter? 1 : 0;
        //        ,    begin
        if (mData == null)
        {
            return begin;
        }
        //             ,      +1
        return mData.size() + begin;
    }


    //             (         )
    public void isShowFooter(boolean showFooter)
    {
        this.mShowFooter = showFooter;
    }

    //         ,        
    public boolean isShowFooter()
    {
        return this.mShowFooter;
    }



    //      ViewHolder
    public class FooterViewHolder extends RecyclerView.ViewHolder
    {
        public FooterViewHolder(View view)
        {
            super(view);
        }
    }

    //      ViewHolder
    public class DefaultViewHolder extends RecyclerView.ViewHolder
    {

        public TextView tv;

        public DefaultViewHolder(View itemView)
        {
            super(itemView);

            tv = (TextView) itemView.findViewById(R.id.tv);

        }
    }


}

効果図
Android--Google官方下拉刷新SwipeRefreshLayout(附加增加上拉加载)_第1张图片
Demoアドレス:http://download.csdn.net/detail/skyunicorn/9565101