ListView——ArrayAdapter

本文详细介绍了在Android应用中使用ListView的方法,包括如何通过Activity和ListActivity继承实现ListView,并展示了如何自定义ArrayAdapter及ListItem样式。

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

ListView用多了,自然而然想去抽时间总结一下,毕竟copy来copy去,久而久之也会也淡忘,勒个时候再去花时间去阅读自己写过的代码,太不明智,也费时间。在这里我把用过的ListView都拿出来与大家分享。持续更新附源码。

[color=red]一:分别继承于Activity,ListActivity,ListView使用[/color]

1)继承于Activity写法

public class ListView_ArrayAdapterActivity extends Activity {

private ListView listView;
private ArrayList<String> list=new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());
listView.setAdapter(adapter);
}

public List<String> getListData(){
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");
return list;
}

}



2)继承于ListActivity写法

public class ListView_ArrayAdapterActivity extends ListActivity {

private ArrayList<String> list=new ArrayList<String>();

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());
setListAdapter(adapter);
}

public List<String> getListData(){
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");
return list;
}

}


对比很容易发现,前者(extends Activity)需要在xml布局中找到ListView控件,后者则不需要,但是后者xml布局中ListView标签id固定.
最后关于布局文件,前者(extends Activity)xml布局中,ListView标签id可以任意取值,而后者(extends ListActivity)ListView标签中id写法固定android:id="@+id/android:list"


[color=red]二:以ArrayAdapter为例,自定义ListItem样式[/color]

系统样式:
[b]android.R.layout.simple_expandable_list_item_1[/b]
 ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());  


自定义样式
[b]R.layout.my_simple_list_item_1[/b]
 ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.my_simple_list_item_1,getListData()); 


[b]my_simple_list_item_1.xml:[/b]

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#0000FF"
android:textSize="12pt"
/>


请留意这种布局,根布局为控件TextView.


[color=red]三:自定义ArrayAdapter[/color]

[b]ListView_ArrayAdapterActivity .java[/b]

public class ListView_ArrayAdapterActivity extends Activity {

private ListView listView;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);

IconListAdapter adapter = new IconListAdapter(this,getListData());
listView.setAdapter(adapter);
}

//初始化数据
private List<IconListItem> getListData(){
List<IconListItem> listItems = new ArrayList<IconListItem>();
IconListItem item1 = new IconListItem("Item 1 ",R.drawable.icon );
IconListItem item2 = new IconListItem("Item 2 ",R.drawable.icon );
IconListItem item3 = new IconListItem("Item 3 ",R.drawable.icon );
IconListItem item4 = new IconListItem("Item 4 ",R.drawable.icon );
listItems.add(item1);
listItems.add(item2);
listItems.add(item3);
listItems.add(item4);
return listItems;
}


class IconListAdapter extends ArrayAdapter<IconListItem> {

protected LayoutInflater mInflater;
private static final int mLayout = R.layout.custom_layout1;

public IconListAdapter(Context context,List<IconListItem> items) {

super(context,mLayout, items);//上下文环境/布局文件/填充布局文件数据
mInflater = LayoutInflater.from(ListView_ArrayAdapterActivity.this);
}

public View getView(int position, View convertView, ViewGroup parent) {

TextView textView;
ImageView imageView;

View view;
if (convertView == null) {
view = mInflater.inflate(mLayout,null);
} else {
view = convertView;
}

textView = (TextView) view.findViewById(R.id.text1);
textView.setText(getItem(position).getTitle());

imageView = (ImageView) view.findViewById(R.id.icon);
imageView.setImageResource(getItem(position).getResource());

return view;
}
}
}


[b]IconListItem.java[/b]

public class IconListItem {

//每条显示的构造方法
private final String mTitle;
private final int mResource;

public IconListItem(String title, int resource) {
mResource = resource;
mTitle = title;
}

public String getTitle() {
return mTitle;
}

public int getResource() {
return mResource;
}
}


[b]main.xml[/b]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>



[b]custom_layout1.xml[/b]

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>

<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
/>
</RelativeLayout>


[quote]给大家列出本类所有成员方法实用的处理方式:

void add(T object) //添加一个对象到本ArrayAdapter

void clear() //清除所有元素

static ArrayAdapter<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) //从layout资源构造arrayadapter

Context getContext() //获取实例

int getCount()

View getDropDownView(int position, View convertView, ViewGroup parent) //获取drop down的popup风格选择条目的内容,参数1是位置,参数2可以通过强制转换直接获取本条的内容

Filter getFilter() //使用正则过滤数据

T getItem(int position) //获取单条内容

long getItemId(int position)

int getPosition(T item) //通过内容获取是某条

View getView(int position, View convertView, ViewGroup parent)

void insert(T object, int index) //插入新条目到数组的index位置

void notifyDataSetChanged() //通知数据变化了,告诉绑定Adapter的widget来更新UI

void remove(T object) //移出一条从数组,这里并没有指定位置

void setDropDownViewResource(int resource) //设置dropdown的layout风格
Sets the layout resource to create the drop down views.

void setNotifyOnChange(boolean notifyOnChange) //本条是arrayadapter最强大的功能,android123强烈推荐处理大数据时使用该方法,可以降低ui的处理量,刷新ui可以更快速,主要可以停止对
(add(T), insert(T, int), remove(T), clear() 的操作,当然可以通过 notifyDataSetChanged(). 或 setNotifyOnChange(true) 通知变化

void sort(Comparator<? super T> comparator) //这里是android开发网经常用的排序,使用arrayadapter可以直接排序,十分方便

推荐大家什么情况使用arrayadapter,什么时候使用baseadapter。当数量较多,比如超过100条或频繁动态增减时使用arrayadapter可以方便控制ui,通过setNotifyOnChanage方法,如果比较简单仅仅呈现直接从 baseadapter更节省资源。

[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值