ListView与适配器


一开始先来一个简单的ListView

看一下layout的文件,写了一个ListView。

<LinearLayout xmlns:android="<a target=_blank href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"
    xmlns:tools="<a target=_blank href="http://schemas.android.com/tools">http://schemas.android.com/tools</a>"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="cn.itcast.listview.MainActivity" >
    <ListView 
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ></ListView>
</LinearLayout>

 

 

然后看一下第一项目的的内容布局。里面是一个TextView

<pre class="html" name="code"><?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:padding="20sp"
    android:orientation="vertical" >
    
	<TextView 
	    android:id="@+id/tv"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:textSize="20sp"
	    />
</LinearLayout>

 

再来就是java代码.里面用的适配器是BaseAdapter下面的一个子类ArrayAdapter

package cn.itcast.listview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//条目里面的内容
		String[] arr = {"条目一","条目二"};
	
		ListView lv = (ListView) findViewById(R.id.lv);
		//创建 一个ArrayAdapter<String>(context, resource, textViewResourceId, objects)适配器,
		//context 得到上下方,resource布局文件,textViewResourceId布局文件里的条目的ID,objects条目里面的内容
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tv, arr);
		//添加 适配器
		lv.setAdapter(adapter);
		
		//添加监听方法
		lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
				String s = (String) parent.getItemAtPosition(position); //获取条目里的数据的位置
				Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show(); //弹出
			}
			
		});
	}

}


 

这里只是先简单的写了一个ListView。

 

 但只能显示一个TextView,如果想显示多几个TextView就得用SimpleAdapter

下面的列子就是simpleAdapter的代码,条目里的数据是从数据库里拿出来的,因为这里是说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" 
     >

    <TextView
        android:id="@+id/id"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="52dp"
        android:text="1"
        android:textSize="20sp" />
	
	<TextView 
	    android:id="@+id/name"
	   android:layout_width="0dp"
        android:layout_weight="2"
	    android:layout_height="wrap_content"
	    android:text="张三"
	    android:textSize="20sp"
	    />
	<TextView 
	    android:id="@+id/balance"
	    android:layout_width="0dp"
        android:layout_weight="2"
	    android:layout_height="wrap_content"
	    android:text="111"
	    android:textSize="20sp"
	    />
</LinearLayout>


这里是条目的布局文件

<?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/lv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
<img width="557" height="508" align="right" style="width: 317px; height: 417px;" src="https://img-blog.csdn.net/20150104004246896?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb0ppYW5MaWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />        ></ListView>
</LinearLayout>


下面是SimpleAdapter的代码


 

public class SilpleActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.simple_layout);
		
		ListView lv = (ListView)findViewById(R.id.lv);
		//从数据中查出数据
		AccounttDao dao = new AccounttDao(getApplicationContext());
		List<Account> accounts = dao.allQuery();
		
		//封装在List中
		List<Map<String,Object>> data = new ArrayList<Map<String,Object>>();
		
		//遍厉数据中的有多少条数据,创建多少个map来封装对像
		for (Account a : accounts) {
			Map<String ,Object> map = new HashMap<String, Object>();
			map.put("_id", a.getId());
			map.put("name", a.getName());
			map.put("balanance", a.getBlanance());
			data.add(map);
			
		}
		
		SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, //context 上下文,data List<Map<String,Object>>数据 ,条目里的布局文件
				new String[]{"_id","name","balanance"} , //Map中的Key
				new int[]{R.id.id,R.id.name,R.id.balance}); //TextView中的id
		lv.setAdapter(adapter);
		
	}

}

 

这里有介绍 一个简单但是好用 的方法//从数据中查出数据,但是过时了,如果数据少可以用这个方法也是不错的先择,效果一样的,布局文件也是一样的,不一样的我粘出来了。

//从数据中查出数据
		AccounttDao dao = new AccounttDao(getApplicationContext());
		Cursor c = dao.cursorQuery();
		//一个过时,但早好用的方法,
		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.item, c, 
				new String[]{"_id","name","balanance"} , //Map中的Key
				new int[]{R.id.id,R.id.name,R.id.balance}); //TextView中的id
		lv.setAdapter(adapter);


自己定义的适配器

public class SilpleActivity extends Activity {
	private List<Account> lists;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.simple_layout);
		
		//从数据库里查出数据
		AccountDao dao = new AccountDao(this);
		lists = dao.allQuery();
		
		//得到ListView的ID,添加适配器
		ListView lv = (ListView) findViewById(R.id.lv);
		lv.setAdapter(new MyAdapter());
		
	}	
	public class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return lists.size();
		}

		
		//返回条目,
		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return lists.get(position);
		}

		//返回条目的ID
		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return lists.get(position).getId();
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			//从用convertView,当走到下一页的时候就不用再来创建TextView,这里用到三元运算,
			//这里的参数null 是父级容器,这里的父级容器是parent,是自己加上去的,所以不用配,如果没有别的父级容器就填null上去
			View v = convertView ==null?View.inflate(SilpleActivity.this, R.layout.item, null) : convertView;
			TextView tvid = (TextView) v.findViewById(R.id.id); //得到id的TextView
			TextView tvname = (TextView) v.findViewById(R.id.name);//得到name的TextView
			TextView tvbalanance = (TextView) v.findViewById(R.id.balance);//得到balanance的TextView
			
			final Account a = lists.get(position);
			
			tvid.setText(a.getId()+"");//id是整数,我得把他变成String
			tvname.setText(a.getName());
			tvbalanance.setText(a.getBlanance());
			
			//设置监听,点击名字弹出名字。
			tvname.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					Toast.makeText(SilpleActivity.this, a.getName(), Toast.LENGTH_SHORT).show();
				}
			
			});
			
			return v;
		}
		
		
	}
}


 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值