ListView中加上加FootView和自动加载listview条目

本文介绍了一个基于Android平台的自定义列表适配器实现案例,通过创建MyListAdapter类继承BaseAdapter并结合MyListItem数据模型,实现了列表项的动态加载与更新。此外,还展示了如何为列表项添加点击监听器及如何实现列表底部加载更多功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.accesscompany.testlistadapter;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";
	/**
	 * 设置布局显示属性
	 */
	private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.WRAP_CONTENT,
			LinearLayout.LayoutParams.WRAP_CONTENT);
	/**
	 * 设置布局显示目标最大化属性
	 */
	private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
			LinearLayout.LayoutParams.FILL_PARENT,
			LinearLayout.LayoutParams.FILL_PARENT);

	private ProgressBar progressBar;
	// My Adapter, based on BaseAdapter
	private MyListAdapter mAdapter = null;
	private int lastItem = 0;
	LinearLayout loadingLayout;
	ListView mainList;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		TextView we = (TextView) findViewById(R.id.wen);

		SpannableStringBuilder style = new SpannableStringBuilder("谢红霞");
		style.setSpan(new UnderlineSpan(), 0, 3,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		we.setText(style);

		LinearLayout layout = new LinearLayout(this);
		// 设置布局 水平方向
		layout.setOrientation(LinearLayout.HORIZONTAL);
		// 进度条
		progressBar = new ProgressBar(this);
		// 进度条显示位置
		progressBar.setPadding(0, 0, 15, 0);
		// 把进度条加入到layout中
		// layout.addView(progressBar, mLayoutParams);
		// 文本内容
		TextView textView = new TextView(this);
		textView.setText("展开更多");
		textView.setGravity(Gravity.CENTER);
		textView.setPadding(100, 10, 0, 20);
		textView.setTextColor(Color.BLUE);
		textView.setTextSize(20);
		// 把文本加入到layout中
		layout.addView(textView, FFlayoutParams);
		// 设置layout的重力方向,即对齐方式是
		layout.setGravity(Gravity.CENTER);

		// 设置ListView的页脚layout
		loadingLayout = new LinearLayout(this);
		loadingLayout.addView(layout, mLayoutParams);
		loadingLayout.setGravity(Gravity.CENTER);
		loadingLayout.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				/*
				 * if (adapter.count<=41) { adapter.count += 10;
				 * adapter.notifyDataSetChanged();
				 * 
				 * }
				 */
				if (mAdapter.mData.size() < 50) {
					for (int i = 0; i < 10; i++) {
						MyListItem list_item = new MyListItem();
						list_item.setTitle("商家XXX" + i);
						list_item.setText("XXXXXXXXXX街道XXX楼" + i);
						mAdapter.addItem(list_item);
					}
					mAdapter.notifyDataSetChanged();
				} else {
					mainList.removeFooterView(loadingLayout);
				}
			}
		});

		mAdapter = new MyListAdapter();
		for (int i = 0; i < 10; i++) {
			MyListItem list_item = new MyListItem();
			list_item.setTitle("title" + i);
			list_item.setText("text" + i);
			mAdapter.addItem(list_item);
		}

		mainList = (ListView) findViewById(R.id.mainlist);
		mainList.addFooterView(loadingLayout);
		mainList.setAdapter(mAdapter);
		mainList.setOnScrollListener(new OnScrollListener() {

			public void onScroll(AbsListView v, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				Log.i(TAG, "Scroll>>>first: " + firstVisibleItem
						+ ", visible: " + visibleItemCount + ", total: "
						+ totalItemCount);
				lastItem = firstVisibleItem + visibleItemCount - 1;
				Log.i(TAG, "Scroll>>>lastItem:" + lastItem);
				// 显示50条ListItem,即0-49,因为onScroll是在“滑动”执行过之后才触发,所以用adapter.count<=41作条件
				/*
				 * if (adapter.count<=41) { if
				 * (firstVisibleItem+visibleItemCount==totalItemCount) {
				 * adapter.count += 10; adapter.notifyDataSetChanged();
				 * listView.setSelection(lastItem); int
				 * currentPage=adapter.count/10;
				 * Toast.makeText(getApplicationContext(), "第"+currentPage+"页",
				 * Toast.LENGTH_LONG).show(); } } else {
				 * listView.removeFooterView(loadingLayout); }
				 */

			}

			@Override
			public void onScrollStateChanged(AbsListView v, int state) {
				if (lastItem == mAdapter.mData.size()
						&& state == OnScrollListener.SCROLL_STATE_IDLE) {
					/*
					 * Log.i(TAG,"ScrollStateChanged>>>state:"+state+"lastItem:"
					 * + lastItem);
					 * //显示50条ListItem,即0-49,因为onScrollStateChanged是在
					 * “拖动滑动”执行过之后才触发,所以用adapter.count<=41作条件 if
					 * (adapter.count<=41) { adapter.count += 10;
					 * adapter.notifyDataSetChanged();
					 * 
					 * }else{ listView.removeFooterView(loadingLayout); }
					 */
				}

			}
		});
	}

	private OnClickListener listenBtnListener = new OnClickListener() {
		public void onClick(View v) {
			Log.i(TAG, "Clicked view: " + v + ", parent: " + v.getParent());
			ViewHolder vh = (ViewHolder) ((View) v.getParent()).getTag();

			AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
			ad.setTitle("Listen button clicked");
			ad.setMessage("The " + vh.position + " listen button clicked");
			ad.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int id) {
					Log.i(TAG, "Listen button click dialog disposing...");
				}
			});
			ad.show();
		}
	};

	private OnClickListener downloadBtnListener = new OnClickListener() {
		public void onClick(View v) {
			Log.i(TAG, "Clicked view: " + v + ", parent: " + v.getParent());
			ViewHolder vh = (ViewHolder) ((View) v.getParent()).getTag();

			AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
			ad.setTitle("Download button clicked");
			ad.setMessage("The " + vh.position + " download button clicked");
			ad.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int id) {
					Log.i(TAG, "Download button click dialog disposing...");
				}
			});
			ad.show();
		}
	};

	private class MyListAdapter extends BaseAdapter {

		private ArrayList<MyListItem> mData = new ArrayList<MyListItem>();
		private LayoutInflater mInflater;

		public MyListAdapter() {
			mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}

		public void addItem(MyListItem item) {
			mData.add(item);
			notifyDataSetChanged();
		}

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

		@Override
		public MyListItem getItem(int position) {
			return mData.get(position);
		}

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Log.i(TAG, "getView " + position + " " + convertView + "; parent: "
					+ parent);
			ViewHolder holder = null;
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.listitem_layout, null);

				holder = new ViewHolder();
				holder.tvTitle = (TextView) convertView
						.findViewById(R.id.itemTitle);
				holder.tvText = (TextView) convertView
						.findViewById(R.id.itemText);

				holder.btnDownload = (TextView) convertView
						.findViewById(R.id.btnDownload);
				holder.position = position;
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.tvTitle.setText(mData.get(position).getTitle());
			holder.tvText.setText(mData.get(position).getText());
			holder.btnDownload.setText("不完整");

			return convertView;
		}

	}

	public class ViewHolder {
		public TextView tvTitle;
		public TextView tvText;

		public TextView btnDownload;
		public int position;
	}
}

 

package com.accesscompany.testlistadapter;

public class MyListItem {
	private String title = null;
	private String text = null;
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getText() {
		return text;
	}
	public void setText(String text) {
		this.text = text;
	}
}

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01"
	android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="100dip">

	<TextView android:text="TextView01" android:layout_height="wrap_content"
		android:textSize="18dip" android:textStyle="bold"
		android:layout_marginLeft="13dip" android:layout_marginTop="10dip"
		android:textColor="@color/blue" android:layout_width="200dip"
		android:id="@+id/itemTitle" />

	<TextView android:text="TextView02" android:textColor="@color/black"
		android:textSize="18dip" android:layout_height="wrap_content"
		android:layout_marginBottom="10dip"
		android:paddingBottom="10dip"
		android:layout_marginLeft="13dip"
		android:layout_width="200dip" android:layout_below="@+id/itemTitle"
		android:id="@+id/itemText" />

	<TextView android:layout_width="60dip" android:layout_height="wrap_content"
		android:id="@+id/btnDownload" android:layout_alignParentRight="true"
		android:layout_centerVertical="true" android:focusable="false"
		android:textColor="@color/black"
		android:scaleType="fitCenter" />



</RelativeLayout>  

 

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

	<LinearLayout android:layout_width="wrap_content"
		android:orientation="horizontal" android:layout_height="50dip">
		<TextView android:text="重新定位" android:layout_width="220dip"
			android:textColor="@color/blue" android:textSize="20dip"
			android:paddingLeft="5dip" android:paddingTop="5dip"
			android:layout_height="wrap_content" />

		<TextView android:text="新建商家" android:layout_width="wrap_content"
		android:id="@+id/wen"
			android:layout_height="wrap_content" android:textColor="@color/blue"
			android:textSize="20dip" android:paddingLeft="5dip"
			android:paddingTop="5dip" android:layout_alignParentRight="true" />

	</LinearLayout>
	
		<LinearLayout android:layout_width="wrap_content"
		android:orientation="horizontal" android:layout_height="50dip">
		<EditText  android:layout_width="200dip"
	         android:layout_marginLeft="20dip" android:id="@+id/at"
			android:textColor="@color/black" android:textSize="20dip"
			android:paddingLeft="5dip" android:paddingTop="5dip"
			android:layout_height="wrap_content" />

		<Button android:text="搜索" android:layout_width="80dip"
			android:layout_height="wrap_content" android:textColor="@color/black"
			android:textSize="20dip" android:paddingLeft="5dip"
			android:paddingTop="5dip" android:layout_alignParentRight="true" />

	</LinearLayout>

	<ListView android:layout_width="wrap_content"
		android:layout_height="300dip" android:cacheColorHint="#00000000"
		android:divider="#000000" android:dividerHeight="1px"
		android:stretchMode="columnWidth" android:id="@+id/mainlist">
	</ListView>
	
	<TextView android:text="选项" android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:textColor="@color/blue"
			android:textSize="20dip" android:paddingLeft="235dip"
			android:paddingTop="15dip" android:layout_alignParentRight="true" />

</LinearLayout>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchzh1000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值