Android中ListView的使用

ListView是一个重要的控件,用于列表式的显示一些条目信息。

首先在Layout中定义以ListView。

    <ListView
        android:id="@+id/lv_all_person"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" >
    </ListView>

Activity中如何使用呢?

myListView=(ListView) findViewById(R.id.lv_all_person);

//设置组件显示的内容
myListView.setAdapter(new MyAdapter());


显示时需要一个适配器,我们自己创建一个,继承BaseAdapter类。

// BaseAdapter 是 google的工程师 给ListAdapter的默认实现
	class MyAdapter extends BaseAdapter{
		/**
		 * 返回当前listview有多少个条目
		 */
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 5;
		}
		
		
		/**
		 * 返回当前position位置对应的条目 的object对象
		 */
		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}
		
		
		/**
		 * 返回当前position位置 某个条目的id
		 */
		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position; 
		}

		
		/**
		 * 返回每一个条目显示的具体内容
		 * 
		 * 计算当前界面 会有多少个条目出现 1.得到每一个textview的高度 2.得到listview的高度 3. listview高度/
		 * textview高度 = 得到了一个屏幕显示的textview的个数
		 * 
		 * listview的每一个条目的显示 都需要调用一次getview的方法 屏幕上有多个item显示 就会调用多少getview的方法
		 * parent 代表的是 当前的这个listview
		 */
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
		TextView tv=new TextView(MainActivity.this);
			tv.setText("我是第"+position+"个文本");			
			return tv;
		}
		
	}

以上是最基本的ListView显示方法。



如果想要用自己的格式显示,可以定义自己的layout来显示ListView。

比如在layout下新建一个xml为item.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"
    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" >

<TextView 
    
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#ffff66ff"
    android:id="@+id/tv_name"
    android:layout_alignParentRight="true"
    android:text="aaa"
    android:textSize="20sp"
    />
  
</RelativeLayout>
    
如何在Activity中视同呢?首先要定义一个“打气筒”。

private LayoutInflater inflate; // 打气筒 吧xml转化为view
接着在onCreate方法中把它初始化,就可以使用了。

		// inflater是一个系统的服务
		inflate = (LayoutInflater) this
				.getSystemService(LAYOUT_INFLATER_SERVICE);

Adapter中的重写方法getView

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

			View view = inflate.inflate(R.layout.item, null);//找到item.xml
			TextView nameTv=(TextView) view.findViewById(R.id.tv_name);
			nameTv.setText(lsit.get(position).getName());
			return view;
		}


下面给每个条目增加点击事件,给ListView添加setOnItemClickListener监听事件。

		myListView.setAdapter(new MyAdapter());
		myListView.setOnItemClickListener(new OnItemClickListener() {
			/**
			 * parent 代表的是当前的listview 
			 * view 代表的当前被点击条目对应的view对象 position
			 * 当前条目在listview中的位置 
			 * id 行号 一般与position 相同的
			 */
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				/*方法一	
				 TextView tv=(TextView) view.findViewById(R.id.tv_name);
					String name=tv.getText().toString();
					Toast.makeText(MainActivity.this, name, Toast.LENGTH_LONG).show();
				  */
					
				/* 方法2	 
				  String name = lsit.get(position).getName();
				  Toast.makeText(MainActivity.this, name,
				  Toast.LENGTH_LONG).show();
				 */
				
				Person object = (Person) parent.getItemAtPosition(position);
				String name = object.getName();
				Toast.makeText(MainActivity.this, name, Toast.LENGTH_LONG).show();
			}

		});
如果使用方法三,那么要修改getItem方法,返回对应位置的boject。
		/**
		 * 返回当前position位置对应的条目 的object对象
		 */
		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return lsit.get(position);
		}



也可以使用一些系统的接口来显示。

1.SimpleAdapter

	List<Map<String, String>> data=new ArrayList<Map<String,String>>();	
	for (Person person : lsit) {
		HashMap<String, String> map=new HashMap<String, String>();
		map.put("name", person.getName());
		data.add(map);
	}

		myListView.setAdapter(new SimpleAdapter(MainActivity.this, data, R.layout.item, new String[]{"name"}, 
				new int[]{R.id.tv_name}));

参数中的data为准备的集合数据,R.layout.item布局文件,后面两个  map中绑定的键,一个是对应布局文件中显示"键"的View。




2. ArrayAdapter

	String[] persons=new String[lsit.size()];
	for(int i=0;i<lsit.size();i++){
		persons[i]=lsit.get(i).getName();
	}

myListView.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.item,R.id.tv_name,persons));
		

这种每条只能显示单个数据。


3.SimpleCursorAdapter

		Cursor c = dao.findAllbyCursor();
		
		mListView.setAdapter(new SimpleCursorAdapter(this, R.layout.item, c,
				new String[] { "name", "age" }, new int[] { R.id.tv_name,
						R.id.tv_age }));
可以方便的传入cursor。

注意:数据库返回cursor时不能关闭。

返回的cursor主键必须是_id.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值