中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用SwipeRefreshLayout實現下拉刷新與上拉加載更多

發布時間:2020-07-25 23:21:03 來源:網絡 閱讀:2057 作者:DennisRuan 欄目:移動開發

SwipeRefreshLayout只能實現下拉刷新,而不能實現上拉加載更多。所以這需要對其進行擴充。

1、首先繼承SwipeRefreshLayout

    public class SwipeRefreshAndMoreLoadLayout extends SwipeRefreshLayout implements OnScrollListener {

接下來直接替代碼了

 

package com.example.swiperefreshlayout;

import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class SwipeRefreshAndMoreLoadLayout extends SwipeRefreshLayout implements OnScrollListener {

	 /**
     * 滑動到最下面時的上拉操作
     */
	private int mTounchslop;
	
	/**
     * ListView的加載中footer
     */
	private View mListViewFooter;
	
	private ListView mListView;

	/**
	 * 按下時的y坐標
	 */
	private int mYdown;

	private int mYlast;
	
	private boolean isLoading = false;

	private OnLoadMoreListener mOnLoadMoreListener;

	private TextView mTvLoadMore;

	private int mVisibleItemCount;

	private int mTotalItemCount;

	public SwipeRefreshAndMoreLoadLayout(Context context) {
		this(context, null);
	}

	public SwipeRefreshAndMoreLoadLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
		mTounchslop = ViewConfiguration.get(context).getScaledTouchSlop();
		mListViewFooter = LayoutInflater.from(context).inflate(R.layout.footer_item, null);
		mTvLoadMore = (TextView) mListViewFooter.findViewById(R.id.tv_loadmore);
	}
	
	@Override
	protected void onLayout(boolean changed, int left, int top, int right,
			int bottom) {
		super.onLayout(changed, left, top, right, bottom);
		//初始化ListView
		if (mListView == null) {
			getListView();
		}
	}
	
	/**
     * 獲取ListView對象
     */
	private void getListView() {
		int childCount = getChildCount();
		if (childCount > 0) {
			for (int i = 0; i < childCount; i++) {
				View child = getChildAt(i);
				if (child instanceof ListView) {
					mListView = (ListView)child;
					// 設置滾動監聽器給ListView, 使得滾動的情況下也可以自動加載
					mListView.setOnScrollListener(this);
					}
			}
		}
	}
	
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		int action = ev.getAction();
		switch (action) {
		case MotionEvent.ACTION_DOWN:
			mYdown = (int)ev.getY();
			break;
			
		case MotionEvent.ACTION_MOVE:
			mYlast = (int)ev.getY();
			break;
			
		case MotionEvent.ACTION_UP:
			if (canLoad()) {
				loadData();
			}
			break;

		default:
			break;
		}
		return super.dispatchTouchEvent(ev);
	}
	
	public void setAdapte(ListView listView, ListAdapter adapter) {
		if (listView != null) {
			listView.addFooterView(mListViewFooter);
			listView.setAdapter(adapter);
			listView.removeFooterView(mListViewFooter);
		}
	}

	private boolean canLoad() {
		return !isLoading && isPullup() && isBottom();
	}
	
	private boolean enableBottomLoad() {
		return !isLoading && isBottom();
	}

	private boolean isBottom() {
		if (mListView != null && mListView.getAdapter() != null) {
			return mVisibleItemCount < mTotalItemCount && mListView.getLastVisiblePosition() == mListView.getAdapter().getCount()-1;
		}
		return false;
	}

	private boolean isPullup() {
		return mYdown-mYlast >= mTounchslop;
	}

	private void loadData() {
		if (mOnLoadMoreListener != null) {
			setLoading(true);
			mOnLoadMoreListener.onLoadMore();
		}
	}
	
	public void setLoading(boolean loading) {
		isLoading = loading;
		if (loading) {
			mListView.addFooterView(mListViewFooter);
		} else {
			mListView.removeFooterView(mListViewFooter);
			mYdown = 0;
			mYlast = 0;
		}
		
	}
	
	public void setLoadingContext(String string) {
		mTvLoadMore.setText(string);
	}
	public void setLoadingContext(int resId) {
		mTvLoadMore.setText(resId);
	}
	
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		mVisibleItemCount = visibleItemCount;
		mTotalItemCount = totalItemCount;
		if (visibleItemCount < totalItemCount && enableBottomLoad()) {
			loadData();
		}
	}

	public void setOnLoadMoreListener(OnLoadMoreListener listener) {
		mOnLoadMoreListener = listener;
	}

	public static interface OnLoadMoreListener {
		void onLoadMore();
	}


}


 

package com.example.swiperefreshlayout;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.example.swiperefreshlayout.SwipeRefreshAndMoreLoadLayout.OnLoadMoreListener;

@SuppressLint("InlinedApi")
public class MainActivity extends Activity implements OnRefreshListener,
		OnLoadMoreListener {

	private SwipeRefreshAndMoreLoadLayout mRefreshLayout;
	private ListView mListView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mListView = (ListView) findViewById(R.id.lv_listview);
		mRefreshLayout = (SwipeRefreshAndMoreLoadLayout) findViewById(R.id.refresh);
		mRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_light,
				android.R.color.holo_green_light,
				android.R.color.holo_orange_light,
				android.R.color.holo_red_light);
		mRefreshLayout.setOnRefreshListener(this);
		mRefreshLayout.setOnLoadMoreListener(this);
		mRefreshLayout.setAdapte(mListView, new MyAdapter());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onRefresh() {
		new Handler().postDelayed(new Runnable() {

			@Override
			public void run() {
				mRefreshLayout.setRefreshing(false);
			}
		}, 5000);
	}

	@Override
	public void onLoadMore() {
		mRefreshLayout.setLoadingContext("正在加載");
		new Handler().postDelayed(new Runnable() {

			@Override
			public void run() {
				mRefreshLayout.setLoading(false);
			}
		}, 5000);
	}

	class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return 30;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View inflate = null;
			TextView tvItem = null;
			if (convertView == null) {
				inflate = getLayoutInflater().inflate(R.layout.listview_item, null);
				tvItem = (TextView) inflate.findViewById(R.id.tv_item);
				inflate.setTag(tvItem);
			} else {
				inflate = convertView;
				tvItem = (TextView) inflate.getTag();
			}
			tvItem.setText("下拉刷新item"+position);
			return inflate;
		}
		
	}

}

 

<com.example.swiperefreshlayout.SwipeRefreshAndMoreLoadLayout 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"
    android:id="@+id/refresh"
    tools:context=".MainActivity" >
    <ListView 
        android:id="@+id/lv_listview"
        android:layout_width="match_parent"
    	android:layout_height="match_parent">
        
    </ListView>
</com.example.swiperefreshlayout.SwipeRefreshAndMoreLoadLayout>

 

源代碼鏈接:http://download.csdn.net/detail/dennisruan/9433709
 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴中市| 东兰县| 高清| 泾川县| 交口县| 邵阳县| 昭苏县| 马公市| 赤峰市| 桓仁| 陇南市| 北海市| 莲花县| 武冈市| 葫芦岛市| 边坝县| 竹山县| 大化| 清丰县| 茌平县| 绥德县| 沂源县| 喀喇| 双辽市| 闵行区| 雅江县| 仪征市| 沁阳市| 文登市| 宁陵县| 临沭县| 南宁市| 当阳市| 宝丰县| 五大连池市| 辽阳市| 松江区| 楚雄市| 苍梧县| 三河市| 山阳县|