`
810364804
  • 浏览: 773312 次
文章分类
社区版块
存档分类
最新评论

Android自学笔记-11-listview简单例子

 
阅读更多

在开发的过程中,经常会用到列表,google已经为我们提供了列表的控件:listview。今天介绍的是最简单的listview。

使用listview首先需要在布局文件中添加一个listview控件,类似下面这样:

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    
    <ListView 
        android:id="@+id/lv"
        android:layout_height="match_parent"
        android:layout_width="match_parent"></ListView>

</RelativeLayout>
然后就是在我们的Activity中获取到该listview,并将数据关联到这个listview,这里简单的介绍三种关联的方式:

1 使用自定义的Adapter

首先我们需要自己编写一个java类继承BaseAdapter,并实现里面的方法。然后我们调用listview的setAdapter方法,并创建一个我们自定义的Adapter的实例,作为参数传入。

下面是自定义的Adapter类:

private class myAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			//返回listview的item的总数
			return 50;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		// 手工穿件listview的item
//		@Override
//		public View getView(int position, View convertView, ViewGroup parent) {
//			Log.i("mxy", "位置" + position);
//			TextView tv = new TextView(getApplicationContext());
//			tv.setText("位置" + position);
//			tv.setTextColor(Color.RED);
//			return tv;
//		}
		
		//通过布局创建listview的item
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			Log.i("mxy", "位置" + position);
			
			View view = View.inflate(getApplicationContext(), R.layout.list_item, null);
			TextView mTextViewPosition = (TextView) view.findViewById(R.id.tv_position);
			TextView mTextViewName= (TextView) view.findViewById(R.id.tv_name);
			
			mTextViewPosition.setText("位置   " + position);
			mTextViewName.setText("姓名   " + position);
			return view;
		}
    	
    }
其中比较重要的是getView,这个方法返回的View就是我们在手机上显示的listview里面的item的View,上面的例子中写了两种创建item的方法都是可以的。

下面是listview的adapter的代码:

 
        lv = (ListView) findViewById(R.id.lv);
        //自定义的Adapter
        lv.setAdapter(new myAdapter());
2 使用ArrayAdapter

代码如下:

 	for(int i = 0 ; i < 50 ; i ++){
        	ary[i] = "功能" + i;
        }
        lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.tv_position, ary));
这种方式适合比较简单的listview,每行只需要填一个数据,ArrayAdapter的参数分别是:Context、item的布局文件、需要赋值的item中控件的id、数组。对于复杂一点的我们可以使用第3种方式。

3使用SimpleAdapter

例子代码如下:

	List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
        
        for(int i = 0 ; i < 50 ; i ++){
        	Map<String,Object> map = new HashMap<String,Object>();
        	map.put("position", "位置" + i);
        	map.put("name", "姓名 " + i);
        	data.add(map);
        }
        lv.setAdapter(new SimpleAdapter(this, data, R.layout.list_item, new String[]{"position","name"}, new int[]{R.id.tv_position,R.id.tv_name}));
这里面的参数就比上面使用ArrayAdapter复杂多了,可以同时向布局文件中得多个控件赋值。

对于listview我们在使用的过程中,并不会立即创建所有的item,只有我们滑动到item在屏幕上显示的时候才会显示,这样应该会加快运行的效率吧。

例子工程下载地址:http://download.csdn.net/detail/mengxiangyue/7036433

转载请注明出处:http://blog.csdn.net/mengxiangyu

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics