android之ListView上拉加载更多和下拉刷新(一)

项目的目录和架构     java

       自定义的ListView的目录结构以下,其必需要设置为Library才可被其它项目使用,使用者只须要将此工程导入到eclipse中便可使用,具体结构如图所示:android

                                                                                                                                                                                                                                                                                   

       例子的目录结构以下,其必需要将自定义的ListView做为Library引用进来,如图所示:架构

                                                                                                     


使用方法app

    接下来咱们讲一下例子中相关的知识点。eclipse

   首先看一下布局文件中的内容 refreshmore.xml中的内容。ide

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.xiaocui.refreshlistview.PullToRefreshListView
        xmlns:mylistview="http://schemas.android.com/apk/res/com.xiaocui.pulltorefresh.sample"
        android:id="@+id/pull_to_refreshmore_listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/white"
        android:cacheColorHint="@android:color/transparent"
        mylistview:mode="both" />

</LinearLayout>

    注意:布局

     1.  post

  xmlns:mylistview="http://schemas.android.com/apk/res/com.xiaocui.pulltorefresh.sample"

    mylistview是自定义的一个命名空间,经过mylistview能够设置对应的属性。在这里设置的mode="both"
ui

   2. 后面的  com.xiaocui.pulltorefresh.sample是应用的包名。this

  接下来,咱们再看一下java代码中的写法:

package com.xiaocui.pulltorefresh.sample;

import java.util.ArrayList;
import com.xiaocui.pulltorefresh.sample.R;
import com.xiaocui.refreshlistview.PullToRefreshBase.OnRefreshListener;
import com.xiaocui.refreshlistview.PullToRefreshListView;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;

public class RefreshListViewActivity extends Activity {

	private PullToRefreshListView listView;
	private ListView listShow;
	private ListViewSampleAdapter adapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.refreshmore);
		
		listView = (PullToRefreshListView) findViewById(R.id.pull_to_refreshmore_listview);
		listShow = listView.getRefreshableView();
		listView.setOnRefreshListener(refreshListener);

		adapter = new ListViewSampleAdapter(RefreshListViewActivity.this);
		listShow.setAdapter(adapter);
		//这里是模拟数据,在实际项目中,能够根据业务需求展现不一样的数据。
		adapter.loadData();
	}

	/**
	 * 上拉刷新,下拉获取更多
	 */
	OnRefreshListener refreshListener = new OnRefreshListener() {

		// 获取更多操做
		@Override
		public void onMore() {
			moreList();
		}

		@Override
		public void onRefresh() {
			refreshList();
		}
	};

	private void refreshList() {
		//为了便于演示,这里延长了1s的等待时间。
		listView.postDelayed(new Runnable() {

			@Override 
			public void run() {
				//完成刷新的功能,将头部分隐藏。
				listView.onRefreshComplete(); 
			}
		}, 1000);
	}

	private void moreList() {
		//为了便于演示,这里延长了1sd的等待时间。
		listView.postDelayed(new Runnable() {

			@Override
			public void run() {
				//完成加载更多的功能,将头部分隐藏。
				listView.onRefreshComplete();
			}
		}, 1000);
	}
	
	
	class ListViewSampleAdapter extends android.widget.BaseAdapter {

		private ArrayList<String> items = new ArrayList<String>();
		LayoutInflater inflater;
		
		public ListViewSampleAdapter(Context context){
			inflater = LayoutInflater.from(context);
		}

		public class ViewHolder {
			public String id;
			public TextView name;
		}

		/**
		 * Loads the data.
		 */
		public void loadData() {
			items = new ArrayList<String>();
			items.add("Ajax Amsterdam");
			items.add("Barcelona");
			items.add("Manchester United");
			items.add("Chelsea");
			items.add("Real Madrid");
			items.add("Bayern Munchen");
			items.add("Internazionale");
			items.add("Valencia");
			items.add("Arsenal");
			items.add("AS Roma");
			items.add("Tottenham Hotspur");
			items.add("PSV");
			items.add("Olympique Lyon");
			items.add("AC Milan");
			items.add("Dortmund");
			items.add("Schalke 04");
			items.add("Twente");
			items.add("Porto");
			items.add("Juventus");
			// MANDATORY: Notify that the data has changed
			notifyDataSetChanged();
		}

		@Override
		public int getCount() {
			return items.size();
		}

		@Override
		public Object getItem(int position) {
			return items.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View rowView = convertView;
			String record = (String) getItem(position);
			ViewHolder viewHolder = new ViewHolder();
			if (convertView == null) {
				rowView = inflater.inflate(R.layout.list_item, null);
				viewHolder.name = (TextView) rowView.findViewById(R.id.textView1);
				rowView.setTag(viewHolder);
			}
			final ViewHolder holder = (ViewHolder) rowView.getTag();
			holder.name.setText(record);
			return rowView;
		}
	}

}

 至此本部分就能够运行了。

相关文章
相关标签/搜索