huangbq 发表于 2013-1-15 02:27:34

ListView初体验

初学android,感觉ListView是一个经常用到的控件,ListView的实现感觉相当的麻烦,对于初学者,对于很好的实现ListView感觉很茫然,从初学者的视角,参考网络上的一些关于ListView的例子,(这里特别感谢Ray's blog 网址:http://rayleung.iteye.com/,在他的博客中学到很多东西。),加上自己作为初学者的一些简单总结,完成本文,希望对初学者有所帮助。这里先说说ListView的实现: ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件。实现步骤:1.准备ListView要显示的数据 ; 2.使用 一维或多维 动态数组 保存数据;3.构建适配器 , 简单地来说, 适配器就是 Item数组 , 动态数组 有多少元素就生成多少个Item; 3.把 适配器 添加到ListView,并显示出来。 该程序效果是实现一个ListView,ListView里面有标题,内容和图片,并加入点击和长按响应。接下来,看看本文代码所实现的ListView:
1.首先在xml里面定义一个listview.xml文件
<?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" >
    <TextView  
             android:layout_width="fill_parent"
             android:layout_height="wrap_content" 
             android:text="@string/listview"/>
 
   <ListView android:id="@+id/listview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            >
   </ListView>    
</LinearLayout> 
2.定义ListView每个条目的Layout,listview_items.xml的代码如下,listview_items.xml用于设计ListView的Item:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
android:id="@+id/RelativeLayout01" 
android:layout_width="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="wrap_content" 
android:paddingBottom="4dip" 
android:paddingLeft="12dip"
android:paddingRight="12dip">
<ImageView 
android:paddingTop="12dip"
android:layout_alignParentRight="true"
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/ItemImage"
/> 
<TextView 
    android:text="TextView01" 
    android:layout_height="wrap_content" 
    android:textSize="20dip" 
    android:layout_width="fill_parent" 
    android:id="@+id/ItemTitle"
    />
<TextView 
android:text="TextView02" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:layout_below="@+id/ItemTitle" 
android:id="@+id/ItemText"
/>
</RelativeLayout>
 3.最后就是JAVA的源代码:ListViewActivity类

package com.google.android.test;
 
import java.util.ArrayList;
import java.util.HashMap;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.View;
import android.view.MenuItem;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.AdapterView.OnItemClickListener;
 
public class ListViewActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.listview);
//绑定layout里面的ListView
ListView list=(ListView)findViewById(R.id.listview);
//生成动态数组,加入数据 
ArrayList<HashMap<String, Object>> listItem=new ArrayList<HashMap<String, Object>>();
for(int i=0;i<10;i++){
HashMap<String, Object> map=new HashMap<String, Object>();
map.put("ItemImage", R.drawable.icon);//图像资源的ID
map.put("ItemTitle", "第"+i+"项,可以把它当做标题");
map.put("ItemText", "这里是我的"+i+"项的内容,可以写入你的内容!");
listItem.add(map);
}
//生成适配器的Item和动态数组对应的元素
SimpleAdapter listItemAdapter=new SimpleAdapter(ListViewActivity.this,
//数据源 
listItem,
///ListItem的XML实现  
R.layout.listview_items,
//动态数组与ImageItem对应的子项 
new String[]{"ItemImage","ItemTitle","ItemText"},
//ImageItem的XML文件里面的一个ImageView,两个TextView ID  
new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText});
//添加并且显示 
list.setAdapter(listItemAdapter); 
//注册监点击听器
list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
setTitle("点击"+arg2+"个项目");

}
});
//添加长按点击
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
menu.setHeaderTitle("长按按钮-ContextMenu");
menu.add(0,0,0,"弹出长按钮菜单子菜单1");
menu.add(0,0,0,"弹出长按钮菜单子菜单2");

}
});

}
//长按钮菜单响应函数
@Override
public boolean onContextItemSelected(MenuItem item){
setTitle("点击了长按钮菜单里的第"+item.getItemId()+"个项目");
return super.onContextItemSelected(item);
}
 
}
页: [1]
查看完整版本: ListView初体验