`

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
         * {@link Adapter#getView(int, View, ViewGroup)}.
         *
         * @param view The view whose scroll state is being reported
         *
         * @param scrollState The current scroll state. One of {@link #SCROLL_STATE_IDLE},
         * {@link #SCROLL_STATE_TOUCH_SCROLL} or {@link #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>
分享到:
评论

相关推荐

    Android中ListView下拉刷新和上拉加载更多的实现

    总之,Android中的ListView下拉刷新和上拉加载更多是提高用户交互体验的重要功能。通过SwipeRefreshLayout和自定义Adapter,开发者可以轻松地将这些功能集成到自己的应用程序中。理解并熟练掌握这两项技术对于...

    Android ListView下拉刷新 Demo.rar

    在本Demo中,我们看到文件名“下拉刷新(自定义listview)CustomListView”,这表明它采用的就是自定义方式。这种方式需要开发者编写额外的布局和逻辑代码,以监听用户的滑动事件并处理刷新动作。 1. **自定义头部...

    横向滑动ListView包括Demo

    总的来说,"横向滑动ListView包括Demo"是一个宝贵的教育资源,可以帮助Android开发者扩展他们的技能,实现更具创新性的界面设计。通过深入研究和理解提供的源码,开发者不仅可以学会如何创建横向滑动的ListView,还...

    最简单可用listview上拉刷新下拉加载demo

    "最简单可用listview上拉刷新下拉加载demo"就是这样一个示例项目,它为初学者提供了实现这两个功能的基础模板。 1. **上拉刷新(Pull-to-Refresh)** 上拉刷新功能允许用户通过在ListView底部向上滑动来获取更新的...

    androidListView下拉刷新Demo

    总结,"androidListView下拉刷新Demo"是一个典型的Android开发实践,涉及到Android UI组件的交互、事件监听、数据加载以及第三方库的使用。通过这样的示例,开发者可以学习如何增强ListView的功能,提供更优的用户...

    水平ListView小demo

    这个"水平ListView小demo"是为初学者设计的一个实例,可以帮助他们理解如何在Android应用中实现这种特殊布局。 首先,要创建一个水平ListView,我们需要使用Android的`RecyclerView`组件,而不是传统的`ListView`。...

    ListView底部加载更多demo

    在这个"ListView底部加载更多demo"中,开发者可能会提供一个简单的数据模型(如User或Article),一个自定义Adapter,一个包含滚动监听器的Activity或Fragment,以及用于加载数据的辅助类。通过分析和学习这个demo,...

    安卓listview相关相关-listview滑动到底部自动加载数据并显示滚动的底部的那个条目点击按钮回到顶部.zip

    这个压缩包"安卓listview相关相关-listview滑动到底部自动加载数据并显示滚动的底部的那个条目点击按钮回到顶部.zip"主要包含了一个实现特定功能的ListView的示例。下面我们将详细探讨这些知识点。 1. **ListView的...

    android 下拉刷新 上拉加载 listview 实现demo

    在Android开发中,下拉刷新和上拉加载是常见的用户交互功能,特别是在列表视图(ListView)中。这种设计能够提升用户体验,使用户无需离开当前界面就能获取更多数据。本教程将详细介绍如何在Android中实现这样的功能。...

    android listview demo

    10. **下拉刷新和上拉加载**:在现代Android应用中,为了提供更好的用户体验,ListView通常会集成SwipeRefreshLayout实现下拉刷新功能,同时结合 Footers 实现上拉加载更多的数据。 综上所述,"android listview ...

    Android应用源码 ListView下拉刷新 Demo.zip

    在Android应用开发中,ListView是常用...通过深入研究和实践这个"Android应用源码 ListView下拉刷新 Demo"项目,开发者可以更好地理解和掌握如何在Android应用中实现在ListView上的下拉刷新功能,提升应用的用户体验。

    android Listview demo

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据集合,并且支持滚动操作。本教程通过一个名为"ListApp"的示例项目,详细介绍了如何在Android中使用ListView来构建用户界面并实现基本的功能。 ...

    Android listView下拉刷新效果demo

    综上所述,实现"Android listView下拉刷新效果demo"涉及到Android UI设计、触摸事件处理、数据加载和异步操作等多个方面,通过自定义或者使用第三方库可以方便地在应用中集成这一特性,提升应用的交互体验。

    完美的ListView下拉刷新上拉加载实例Demo

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。然而,为了提供更好的用户体验...通过学习和研究这个Demo,开发者可以深入理解Android ListView与数据加载的交互机制,提升自己的应用开发技能。

    listview 下拉加载demo

    综上所述,"listview 下拉加载demo"是关于在ListView中实现下拉加载功能的一种实例,它涉及到滚动事件监听、数据加载、UI更新等多个关键环节,是Android开发中提高应用性能和用户体验的重要技术之一。通过理解和实践...

    android ListView完美实现下拉刷新Demo

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。...记住,良好的用户体验在于细节,所以在实际开发中,还需要关注滑动流畅度、加载状态提示等细节问题,以打造一个完善的下拉刷新ListView。

    安卓Android源码——ListView下拉刷新 Demo.zip

    这个Demo中可能还会包含自定义适配器(Adapter)的实现,以便将数据绑定到ListView的各个Item上。适配器通常需要继承自BaseAdapter或者使用已有的诸如ArrayAdapter、CursorAdapter等,根据实际需求选择合适的类型。 ...

    Android】ListView监听上下滑动实现一键置顶

    在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。本教程将深入讲解如何监听ListView的上下滑动事件,并实现下拉刷新、上拉加载以及一键置顶的功能。 首先,我们要理解ListView的工作原理。...

    listview滑动显示球最简demo

    "listview滑动显示球最简demo"是一个示例项目,它演示了如何在ListView滚动时动态显示小球效果,这种效果常用于加载指示或者提示用户还有更多内容可以滑动查看。这种功能能够提升用户体验,增加应用的交互性和趣味性...

    android demo,自定义支持横向滚动的ListView。

    在Android SDK中,已有HorizontalScrollView和HorizontalGridView可以实现横向滚动,但它们的功能相对有限,无法像ListView那样动态加载和管理大量数据。因此,自定义实现横向ListView能提供更高的灵活性和定制化。...

Global site tag (gtag.js) - Google Analytics