ListView是androidn中的一个非常重要的组件,基本上在每一个软件中都会用到 。下面谈谈关于我对ListView的理解
1通过资源文件实现简单的ListView显示 ,在res/values/strings中添加如下代码:
<string-array name="citys">
<item>北京</item>
<item>成都</item>
<item>汉中</item>
<item>重庆</item>
</string-array>
然后在activity_mian.xml文件中添加如下代码
<ListView
android:id="@+id/listView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:entries="@array/citys"/>
添加事件处理方法 实现android.widget.AdapterView.OnItemClickListener 下的接口 添加实现方法
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//通过输出可以得知View 为TextView
//System.out.println(view.getClass());
TextView tv=(TextView)view;
Toast.makeText(this, tv.getText(), Toast.LENGTH_SHORT).show();
}
通过继承ListActivity来实现,注意不需要设置setContentVeiw了因为在ListActivity中自己已经实现了还有上面的事件处理方法ListView已经做了空实现只需从写
onListItemClick方法就行了
public class MainActivity3 extends ListActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] names={"张三","李四","王五","赵六"};
Map<String,Object>map=null;
List<Map<String,Object>> data =new ArrayList<Map<String,Object>>();
//录入数据
for(int i=0;i<names.length;i++){
map=new HashMap<String, Object>();
map.put("name", names[i]);
map.put("image", R.drawable.myimage3);
data.add(map);
}
SimpleAdapter adapter=new SimpleAdapter(this, data,R.layout.main2_item,
new String[]{"name","image"}, new int[]{R.id.textView1,R.id.imageView1});
getListView().setAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}
}
2 自定义ListVeiw 方式(图片+文本框)
(1) 通过SimplerAaapter实现:
1 ) 新建布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
2 )在MainActivity中重写如下代码
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(ListView)findViewById(R.id.listView01);
String[] names={"张三","李四","王五","赵六"};
Map<String,Object>map= null;new HashMap<String, Object>();
List<Map<String,Object>> data =new ArrayList<Map<String,Object>>();
//录入数据
for(int i=0;i<names.length;i++){
map=new HashMap<String, Object>();
map.put("name", names[i]);
map.put("image", R.drawable.myimage3);
data.add(map);
}
//System.out.println("***************");
//System.out.println(data);
/*SimpleAdapte 的参数如下
* 1 上下文
* 2 一个List<Map<?,?>>一个装着Map的List
* 3布局(ListView显示方式)
* 4一个字符串数组与Map中的key对应
* 5一个整形数组与Map中的Valeu对应
* */
SimpleAdapter adapter=new SimpleAdapter(this, data, R.layout.main2_item,
new String[]{"name","image"}, new int[]{R.id.textView1,R.id.imageView1});
listView.setAdapter(adapter);
}
效果如下(这里我自己的图片没有处理好)
(2)用SimpleAdapter我们可以自定义我们喜欢的风格,但是simpleAdapter却不能进行一些相关的处理操作为此
我们需要自己来写我们自己的Adapter,因为这个Adapter我们只想我们自己去使用所以用内部类来实现
1)首先新建整体布局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/main4_listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
</LinearLayout>
2)新建自定义的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="wrap_content"
android:orientation="horizontal"
android:gravity="center">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
java代码
public class MainActivity4 extends Activity {
private ListView listView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main4);
listView = (ListView) findViewById(R.id.main4_listView);
MyAdapter adapter = new MyAdapter();
listView.setAdapter(adapter);
}
String[] names = { "张三", "李四", "王五", "赵六" };
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int position) {
return names[position];
}
@Override
public long getItemId(int position) {
return position;
}
int i = 1;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
// 获取资源文件布局
convertView = getLayoutInflater().inflate(R.layout.main4_item,null);
//查找相应的组件
holder.textView = (TextView) convertView.findViewById(R.id.textView1);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (i % 2 == 0) {
holder.imageView.setImageResource(R.drawable.myimage3);
} else {
holder.imageView.setImageResource(R.drawable.ic_launcher);
}
holder.textView.setText(names[position]);
i++;
return convertView;
}
}
static class ViewHolder {
ImageView imageView;
TextView textView;
}
}