当前位置: 代码迷 >> Android >> android 中listview滑动加载的容易demo
  详细解决方案

android 中listview滑动加载的容易demo

热度:72   发布时间:2016-05-01 19:16:37.0
android 中listview滑动加载的简单demo
在使用listview时,滑动加载可以提高效率,增加用户体验。

主要用到一个OnScrollListener

   /**         * The view is not scrolling. Note navigating the list using the trackball counts as         * being in the idle state since these transitions are not animated.         */        public static int SCROLL_STATE_IDLE = 0;        /**         * The user is scrolling using touch, and their finger is still on the screen         */        public static int SCROLL_STATE_TOUCH_SCROLL = 1;        /**         * The user had previously been scrolling using touch and had performed a fling. The         * animation is now coasting to a stop         */        public static int SCROLL_STATE_FLING = 2;        /**         * Callback method to be invoked while the list view or grid view is being scrolled. If the         * view is being scrolled, this method will be called before the next frame of the scroll is         * rendered. In particular, it will be called before any calls to         * [email protected] Adapter#getView(int, View, ViewGroup)}.         *         * @param view The view whose scroll state is being reported         *         * @param scrollState The current scroll state. One of [email protected] #SCROLL_STATE_IDLE},         * [email protected] #SCROLL_STATE_TOUCH_SCROLL} or [email protected] #SCROLL_STATE_IDLE}.         */        public void onScrollStateChanged(AbsListView view, int scrollState);        /**         * Callback method to be invoked when the list or grid has been scrolled. This will be         * called after the scroll has completed         * @param view The view whose scroll state is being reported         * @param firstVisibleItem the index of the first visible cell (ignore if         *        visibleItemCount == 0)         * @param visibleItemCount the number of visible cells         * @param totalItemCount the number of items in the list adaptor         */        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,                int totalItemCount);


package com.nico.listviewload;import java.util.ArrayList;import java.util.List;import com.nico.bean.MsgInfo;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.widget.AbsListView.OnScrollListener;public class MainActivity extends Activity {	List<MsgInfo> infoList = null;	private LayoutInflater inflater = null;	private ListView listview = null;	private myAdapter adapter = null;	private LinearLayout ftview = null;	private Handler handler = new Handler() {		@Override		public void handleMessage(Message msg) {			super.handleMessage(msg);			switch (msg.what){							case 1:					 adapter.notifyDataSetChanged();				try {					Thread.sleep(2000l);				} catch (InterruptedException e) {					e.printStackTrace();				}				setAdapter();					break;			}		}	};	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		inflater = this.getLayoutInflater();		listview = (ListView) findViewById(R.id.listview);		ftview = (LinearLayout) inflater.inflate(R.layout.ftview, null);		listview.addFooterView(ftview, null, false);		listview.setAdapter(new myAdapter());		adapter = new myAdapter();		ftview.setVisibility(View.VISIBLE);		listview.setOnScrollListener(new OnScrollListener() {			@Override			public void onScrollStateChanged(AbsListView view, int scrollState) {				if (scrollState == SCROLL_STATE_IDLE						&& view.getLastVisiblePosition() == view.getCount() - 1)				{					handler.sendEmptyMessage(1);				}			}			@Override			public void onScroll(AbsListView view, int firstVisibleItem,					int visibleItemCount, int totalItemCount) {			}		});	}	public List<MsgInfo> getList() {		List<MsgInfo> infoList = new ArrayList<MsgInfo>();		for (int i = 0; i < 7; i++) {			MsgInfo info = new MsgInfo();			info.id = i;			info.detailinfo = "这是第" + i + "条信息";			info.name = "第" + i + "项";			info.size = 1024 * i;			infoList.add(info);		}		return infoList;	}	public void setData() {		infoList = getList();	}	public void setAdapter() {		for (int i = 0; i < 7; i++) {			MsgInfo info = new MsgInfo();			info.id = i;			info.detailinfo = "这是第" + i + "条信息";			info.name = "第" + i + "项";			info.size = 1024 * i;			infoList.add(info);		}		adapter.notifyDataSetChanged();	}	public class myAdapter extends BaseAdapter {		@Override		public void notifyDataSetChanged() {			if(ftview.getVisibility()==View.VISIBLE)			{				ftview.setVisibility(View.GONE);			}			else if(ftview.getVisibility()==View.GONE)			{				ftview.setVisibility(View.VISIBLE);			}			super.notifyDataSetChanged();		}		TextView name, detail, size;		public myAdapter() {			setData();		}		@Override		public int getCount() {			return infoList.size();		}		@Override		public Object getItem(int position) {			return infoList.get(position);		}		@Override		public long getItemId(int position) {			return position;		}		@Override		public View getView(int position, View convertView, ViewGroup parent) {			if (convertView == null) {				convertView = inflater.inflate(R.layout.item, null, false);			}			name = (TextView) convertView.findViewById(R.id.name);			detail = (TextView) convertView.findViewById(R.id.detail);			size = (TextView) convertView.findViewById(R.id.size);			name.setText(infoList.get(position).name);			detail.setText(infoList.get(position).detailinfo);			size.setText(infoList.get(position).size + "");			return convertView;		}					}	public class LoadAsyTask extends AsyncTask<String, String, String> {		@Override		protected String doInBackground(String... params) {			for (int i = 0; i < 7; i++) {				MsgInfo info = new MsgInfo();				info.id = i;				info.detailinfo = "这是第" + i + "条信息";				info.name = "第" + i + "项";				info.size = 1024 * i;				infoList.add(info);			}			return null;		}		@Override		protected void onPostExecute(String result) {			super.onPostExecute(result);					ftview.setVisibility(View.GONE);			adapter.notifyDataSetChanged();		}	}}


<?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">	<LinearLayout android:layout_width="fill_parent" android:gravity="center_horizontal"		android:layout_height="wrap_content" android:layout_gravity="center_horizontal">		<ImageView android:layout_width="50dip"			android:layout_height="50dip" 			android:src="@drawable/progressbar" android:id="@+id/pbdrawable" />		<TextView android:layout_width="wrap_content"			android:layout_height="wrap_content" android:text="请稍后..." android:id="@+id/pbtxt" />	</LinearLayout></LinearLayout>


<?xml version="1.0" encoding="utf-8"?><rotate xmlns:android="http://schemas.android.com/apk/res/android"	android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"	android:toDegrees="360">	<shape android:shape="ring" android:innerRadiusRatio="3"		android:thicknessRatio="8" android:useLevel="false">		<gradient android:type="sweep" android:useLevel="false"			android:startColor="#000000" android:centerColor="#FFFFFF"			android:centerY="0.50" android:endColor="#000000" />	</shape></rotate>
  相关解决方案