ListView的适配器BaseAdapter使用详解
来源:互联网 发布:win10电脑优化软件 编辑:程序博客网 时间:2024/05/22 05:19
在Android中ListView的使用非常广泛,Android系统为我们提供了多中可供选择的适配器(Adapter),但我认为最好用的还是BaseAdapter。
一般我们继承自BaseAdapter来重写其中的方法,可以让我们实现各种各样的布局。下面贴上自己写的Demo,以便于理解:
首先是Activity的布局文件actibity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
tools:context=".MainActivity" />
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/hello"
android:background="#ff00ff00" >
</ListView>
</RelativeLayout>
接下来是ListVIew中单个条目list_item_layout.xml的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/image"
android:layout_width="50dip"
android:layout_height="50dip"
android:background="#ff000fff"
android:layout_marginLeft="10dip"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/name"
android:layout_width="80dip"
android:layout_height="50dip"
android:background="#fffff000"
android:layout_marginLeft="120dip"
android:layout_centerVertical="true" />
</RelativeLayout>
然后是定义的对象类People,用来将相关数据封装:
package com.archermind.testlistview;
public class People {
private int mId;
private int mIcon;
private String mName;
public People(int mIcon, String mName) {
super();
this.mId = (int) (Math.random() * 100);
this.mIcon = mIcon;
this.mName = mName;
}
public int getmId() {
return mId;
}
public void setmId(int mId) {
this.mId = mId;
}
public int getmIcon() {
return mIcon;
}
public void setmIcon(int mIcon) {
this.mIcon = mIcon;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
}
最后就是Activity文件MainActivity.java内容:
package com.archermind.testlistview;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView mListView;
private MyBaseAdapter mAdapter;
private ArrayList<People> mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mData = new ArrayList<People>();
mData.add(new People(R.drawable.ic_launcher, "Zhangsan"));
mData.add(new People(R.drawable.ic_action_search, "Lisi"));
mListView = (ListView) findViewById(R.id.list);
mAdapter = new MyBaseAdapter(mData, this);
mListView.setAdapter(mAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private class MyBaseAdapter extends BaseAdapter {
private ArrayList<People> mData;
private LayoutInflater mInflater = null;
public MyBaseAdapter(ArrayList<People> data, Context context) {
this.mData = data;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData == null ? 0 : mData.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mData.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return mData.get(position).getmId();
}
/**
*在getView方法中使用ViewHolder与convertView可以减少绘制View,从而优化ListVIew性能
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.list_item_layout,
null);
holder.image = (ImageView) convertView.findViewById(R.id.image);
holder.name = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//一般按如下方式将数据与UI联系起来
holder.image.setImageResource(mData.get(position).getmIcon());
holder.name.setText(mData.get(position).getmName());
return convertView;
}
class ViewHolder {
public ImageView image;
public TextView name;
}
}
}
- ListView的适配器BaseAdapter使用详解
- 学会使用listview的自定义baseadapter适配器
- listView适配器之BaseAdapter详解
- android listview的适配器------baseadapter
- ListView的优化 +BaseAdapter适配器
- Android-ListView适配器BaseAdapter的使用和优化
- ListView应用Demo使用自定义的适配器继承BaseAdapter
- 关于ListView使用BaseAdapter和SimpleAdapter适配器
- ListView -- BaseAdapter的使用
- listview的使用----BaseAdapter
- ListView+BaseAdapter的使用
- Android组件ListView的适配器BaseAdapter
- BaseAdapter自定义适配器及ListView的优化
- listview gridview 的万能适配器 baseAdapter
- BaseAdapter 作为 ListView 适配器
- ListView适配器BaseAdapter
- ListView 适配器BaseAdapter配置
- ListView适配器BaseAdapter
- What is the relationship between WebIDL and WebKitIDL
- Java异常大全
- MVC Razor
- C语言 gets()和scanf()函数的区别
- Android获取应用程序的版本信息
- ListView的适配器BaseAdapter使用详解
- ListCtrl处理大数据时的方法之虚拟列表总结
- 5个人三门成绩的总分和平均分
- 复制对象
- java 栈内存的共享机制
- java开发过程常用基础函数
- iOS 推送通知 客户端实现
- ECMALL注册(邮箱或手机验证)
- 动态合并单元格