您的位置:首页 > 其它

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

2016-02-11 16:53 417 查看

首先来配置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自定义已经完成了,上图让大家欣赏一下吧:







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息