运用BaseAdapter自定义一个经典的ListView

本文详细介绍了如何通过自定义BaseAdapter来配置一个经典的ListView。主要步骤包括:1) 设计并配置xml文件main.xml和item.xml,main.xml中包含ListView;2) 创建自定义适配器MyBaseAdapter,继承自BaseAdapter;3) 创建主Activity Main,继承自Activity进行相关配置;4) 更新Manifest文件。最后展示了完成后的效果。

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

首先来配置xml文件,main.xml和item.xml。

main.xml:主界面布局,包含一个ListView组件。

<?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="vertical" >
   
 <ListView 
     android:id="@+id/listView"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     
 </ListView>   

</LinearLayout>

</pre><h1>item.xml:自定义ListView子项的布局文件,包含一个Imageview和两个TextView。</h1><pre class="html" name="code"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:orientation="horizontal"
     >
    <ImageView
        android:id="@+id/item_img"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:scaleType="fitXY"
        android:layout_margin="10dp"
         />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"  
        android:layout_marginTop="5dp" 
        android:paddingRight="5dp"     
        android:orientation="vertical" >
        <TextView
            android:id="@+id/item_coins"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:textColor="#ffcc22"
            android:singleLine="true"
            android:ellipsize="end"
            android:textStyle="bold"
            android:textSize="18sp" />
        <TextView
            android:id="@+id/item_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:gravity="left"
            android:textColor="#0000ee"
            android:textSize="14sp" 
            android:maxLines="1"
            android:layout_marginTop="5dp"
            android:ellipsize="end"/>
    </LinearLayout>
</LinearLayout>

其次来自定义适配器,创建MyBaseAdapter继承自BaseAdapter:

package com.wnn.sw;

import java.util.List;
import java.util.Map;

import android.annotation.SuppressLint;
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;

public class MyBaseAdapter extends BaseAdapter{

	private List<Map<String,Object>> mList;
	private Context context;
	public MyBaseAdapter(Context context,List<Map<String,Object>> mList){
		this.mList = mList;
		this.context = context;
	}
	//获得ListView子项个数
	@Override
	public int getCount() {
		return mList.size();
	}
	//获得ListView某个子项
	@Override
	public Object getItem(int position) {
		return mList.get(position);
	}
	//获得ListView某个子项的Id
	@Override
	public long getItemId(int position) {
		return position;
	}

	@SuppressLint("InflateParams")
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		Item item = null;
		//判断ListView子项布局是否加载如果已经加载则直接使用无需重复加载
		if(convertView == null){
			item = new Item();
			
			//获得组件,实例化组件  
			convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
			item.imgId = (ImageView) convertView.findViewById(R.id.item_img);
			item.coinsNum = (TextView) convertView.findViewById(R.id.item_coins);
			item.info = (TextView) convertView.findViewById(R.id.item_info);
			convertView.setTag(item);
		}else{
			item = (Item)convertView.getTag();
		}
		//绑定数据
		item.imgId.setImageResource((Integer)mList.get(position).get("img"));
		item.coinsNum.setText((String)mList.get(position).get("coinsNum"));
		item.info.setText((String)mList.get(position).get("info"));
		return convertView;
	}
	//将item.xml的所有组建封装成类
	public final class Item {
		public TextView coinsNum;
		public TextView info;
		public ImageView imgId;
	}
}

接着来配置主Activity,创建Main类让他继承自Activity:

package com.wnn.sw;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class Main extends Activity{
	private ListView mListView;
	private MyBaseAdapter mAdapter;
	private List<Map<String,Object>> mList = new ArrayList<Map<String,Object>>();
	private int[] img = new int[]{R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
								 	R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
								 		R.drawable.ic_launcher};
	private String[] coinsNum = new String[]{"This is Title","This is Title","This is Title",
												"This is Title","This is Title","This is Title","This is Title"};
	private String[] info = new String[]{"This is the info!","This is the info!","This is the info!",
											"This is the info!","This is the info!","This is the info!","This is the info!"};
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);				
		mListView = (ListView) findViewById(R.id.listView);
		//通过getData()方法获得要显示的数据资源
		mList = getData(img,coinsNum,info);
		mAdapter = new MyBaseAdapter(this, mList);
		mListView.setAdapter(mAdapter);
	}
	/**
	 * 将图片和文字资源添加到List
	 * @param img
	 * @param coinsNum
	 * @param info
	 * @return
	 */
	public List<Map<String,Object>> getData(int[] img,String[] coinsNum,String[] info){
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		for(int i = 0;i<7;i ++){
			Map<String, Object> item = new HashMap<String, Object>(); 
			item.put("img", img[i]);
			item.put("coinsNum", coinsNum[i]);
			item.put("info", info[i]);
			list.add(item);
		}
		return list;
	}
}

最后配置,Manifest文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wnn.sw"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
	<activity 
	    android:name=".Main">
	    <intent-filter>
	        <action android:name="android.intent.action.MAIN"/>
	        <category android:name="android.intent.category.LAUNCHER"/>
	    </intent-filter>
	</activity>
    </application>

</manifest>

OK!大功告成!最经典的ListView自定义已经完成了,上图让大家欣赏一下吧:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值