自定义ListView的简单使用方法

ListView控件在Android应用中的使用详解
本文详细介绍了ListView控件在Android开发中的常见用法,包括布局配置、数据适配器实现、数据填充及点击事件处理。通过实例演示了如何自定义布局和适配器,以及如何设置数据源和事件监听。

ListView是安卓编程最常使用的控件之一,这是我最常用的一种方法,记录下,以便查看,随便请大虾看看,有没有什么不妥的地方。

1.布局文件。

<ListView
                android:id="@+id/list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:divider="#40000000"
                android:dividerHeight="0.3dp" >
            </ListView>

2.Activty中初始化代码

private ListView list;	
list = (ListView) view.findViewById(R.id.list);

3.保存数据的data类


/**
 * 
 * @author 任爱民
 */
public class BiaoData {
	private String title;// 一个字段
	public BiaoData(String title) {
		super();
		this.title = title;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
}

4.每条View的BaseAdpter

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.wmaifclient.R;
import com.wmaifclient.adapter.data.BiaoData;

public class ListAdapter extends BaseAdapter {

	private List<Data> list = new ArrayList<Data>();
	private Context context;

	public void adddata(Data data) {
		list.add(data);
	}

	public void removeint(int n) {
	       list.remove(n);
	}

	public ListAdapter(Context context) {
		super();
		this.context = context;
	}

	public Context getContext() {
		return context;
	}

	public void setContext(Context context) {
		this.context = context;
	}

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

	@Override
	public Object getItem(int n) {
		return list.get(n);
	}

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

	@Override
	public View getView(int n, View convertview, ViewGroup viewgroup) {
		if (convertview == null) {
			convertview = LayoutInflater.from(getContext()).inflate(
					R.layout.list_main, null);
			convertview.setTag(new BiaoContent((TextView) convertview
					.findViewById(R.id.title)));
		}
		// 赋值
		Content content = (Content) convertview.getTag();
		content.getTitle().setText(biaolist.get(n).getTitle());

		return convertview;
	}

	public class Content {
		private TextView title;// 标题
		

		public BiaoContent(TextView title) {
			super();
			this.title = title;
		}

		public TextView getTitle() {
			return title;
		}

		public void setTitle(TextView title) {
			this.title = title;
		}
       }
}

5.list_main.xml为自定义布局。

           <?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"
    android:orientation="horizontal" >
             <TextView
                android:id="@+id/title"
                style="@style/place_font"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/black" />
</LinearLayou>

6.为ListView设置自定义的BaseAdapter

              <pre name="code" class="java">ListAdapter adapter = new ListAdapter(getContext());
		// 参数依次是Drawable houseimage, String title, int price, String
		// place,String explore, String discount
		adapter.adddata(new Data( "玛丽的花园"));	
                adapter.adddata(new Data( "玛丽的花园"));
                adapter.adddata(new Data( "玛丽的花园"));
                adapter.adddata(new Data( "玛丽的花园"));
                adapter.adddata(new Data( "玛丽的花园"));
                adapter.adddata(new Data( "玛丽的花园"));
if(list != null)list.setAdapter(adapter);



7.点击事件

list.setOnItemClickListener(new CustomOnItemClickListener());	
class CustomOnItemClickListener implements OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> adaptetview, View v, int n,
				long m) {
		}

	}



### 自定义 ListView使用教程 #### 1. 创建布局文件 为了创建自定义 `ListView`,首先需要设计列表项的布局文件。以下是示例代码: ```xml <!-- res/layout/item_list.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="8dp"> <ImageView android:id="@+id/imageViewIcon" android:layout_width="40dp" android:layout_height="40dp" android:contentDescription="@string/desc_image"/> <TextView android:id="@+id/textViewItemTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:layout_marginStart="16dp"/> </LinearLayout> ``` 此布局文件定义了一个简单的列表项结构,包含一个图标 (`ImageView`) 和一段文字描述 (`TextView`)。 --- #### 2. 定义数据模型类 为了让数据更易于管理,通常会创建一个 Java 或 Kotlin 类来表示每一条记录的数据模型。例如: ```java // 数据模型类 public class ListItem { private int iconResId; private String title; public ListItem(int iconResId, String title) { this.iconResId = iconResId; this.title = title; } public int getIconResId() { return iconResId; } public String getTitle() { return title; } } ``` 上述代码展示了如何封装每个条目的图像资源 ID 和标题字符串。 --- #### 3. 实现自定义 Adapter 要让 `ListView` 显示自定义的内容,需继承 `BaseAdapter` 并重写其方法。以下是一个完整的实现例子: ```java import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; public class CustomListAdapter extends BaseAdapter { private Context context; private List<ListItem> listItemList; public CustomListAdapter(Context context, List<ListItem> listItemList) { this.context = context; this.listItemList = listItemList; } @Override public int getCount() { return listItemList.size(); // 返回总项目数 } @Override public Object getItem(int position) { return listItemList.get(position); // 获取指定位置的对象 } @Override public long getItemId(int position) { return position; // 返回项目的唯一标识符 } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.item_list, parent, false); viewHolder = new ViewHolder(); viewHolder.imageViewIcon = convertView.findViewById(R.id.imageViewIcon); viewHolder.textViewItemTitle = convertView.findViewById(R.id.textViewItemTitle); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } ListItem listItem = listItemList.get(position); viewHolder.imageViewIcon.setImageResource(listItem.getIconResId()); viewHolder.textViewItemTitle.setText(listItem.getTitle()); return convertView; } static class ViewHolder { ImageView imageViewIcon; TextView textViewItemTitle; } } ``` 这段代码实现了 `CustomListAdapter`,它负责将数据绑定到视图上,并通过缓存机制提升性能[^1]。 --- #### 4. 设置 ListView 及绑定数据 在 Activity 中初始化 `ListView` 并设置适配器: ```java import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; import java.util.List; public class DIYListViewActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_diylist_view); ListView listView = findViewById(R.id.listView); // 准备数据源 List<ListItem> listItemList = new ArrayList<>(); listItemList.add(new ListItem(R.drawable.ic_launcher_foreground, "Home")); listItemList.add(new ListItem(R.drawable.ic_settings_black_24dp, "Settings")); // 初始化适配器并绑定到 ListView CustomListAdapter adapter = new CustomListAdapter(this, listItemList); listView.setAdapter(adapter); } } ``` 以上代码片段完成了从界面加载、数据准备到适配器绑定的过程[^3]。 --- #### 5. 性能优化建议 当处理大量数据时,可以通过以下方式进一步优化 `ListView` 的表现: - **ViewHolder 模式**:减少每次绘制时查找控件的时间消耗。 - **懒加载图片**:对于网络图片,采用异步加载技术以避免阻塞主线程[^2]。 - **分页加载**:如果数据量过大,则考虑按需加载更多内容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值