Android:ListViewAdapter

MainActivity:

  

package com.wyl.listview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
	ListView listview;
	ListAdapter adapter;
	ListAdapter la;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
        
    }
	private void init() {
		listview = (ListView) findViewById(R.id.listview01);
		adapter.a
//		//数据源,
//		//1.新建适配器
//		//
//		String[] a = {"the first","the second","第三个","张雅岚"};
		List<String> b = new ArrayList<String>();
		b.add("张雅岚");
		b.add("wyl");
//		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, a);
//		listview.setAdapter(adapter);
		
		
		
//		
//		String[] c = {"one","two","three","four"};
//		adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1 , c);
//		System.out.println("=============");
//		listview.setAdapter(adapter);
//		la = new SimpleAdapter(this, getData(), resource, from, to)
		
//		
//		public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
//
//		Added in API level 1
//		Constructor
//
//		Parameters
//		context	The context where the View associated with this SimpleAdapter is running
//		data		  A List of Maps. Each entry in the List corresponds to one row in the list. 
//				    The Maps contain the data for each row, and should include all the entries specified in "from"
//		resource	  Resource identifier of a view layout that defines the views for this list item. The layout 
//					file should include at least those named views defined in "to"
//		from	     A list of column names that will be added to the Map associated with each item.
//		to	          The views that should display column in the "from" parameter. These should all be TextViews. 
//					The first N views in this list are given the values of the first N columns in the from parameter.
		
		la = new SimpleAdapter(this,getData(),R.layout.item,new String[]{"pic","text"},new int[]{R.id.pic,R.id.text});
		
		listview.setAdapter(la);
		
		
		
		
		
		
		
	}
	private List<Map<String, Object>> getData() {
		
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Map map = new HashMap<String,Object>();
		for(int i=0;i<10;i++){
			map.put("pic", R.drawable.ic_launcher);
			map.put("text", "wyl"+i);
			System.out.println("i:"+i);
			list.add(map);
			
		}
		
		return list;
		
	}

    
}

  xml:

<?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="horizontal" >
    <ImageView 
        android:id="@+id/pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:src="@drawable/ic_launcher"
        />
	<TextView 
	    android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        
        android:textSize="20sp"
        android:textColor="#000000"
        android:text="demo"
        />
</LinearLayout>

  PS:SimpleAdapter的构造方法的参数解释:

new SimpleAdapter(context,data,resource,from,to)
context: 上下文
data: 数据源(List<? extends Map<String,?>>data) 一个Map所组成的List集合
每一个Map都会去对应ListView列表中的一行
每一个Map(键 - 值对)中的键必须包含所有在from中所指定的值
resource: 列表项的布局文件ID
from: Map中的键名
to: 绑定数据视图中的ID,与from成对应关系
-----------------------------------
context:一般指当前的activity,用this即可;
data:一个数据源,本课程的重点,创建Map并添加信息;
resource:一个布局文件ID,表示listview中每一个item的布局方式;
from:Map的键名,listview中的item内部元素对应的名字;
to:resource布局文件中,每个元素的ID。

这里说说我自己对这这五个参数的理解。

我们可以发现,第三个参数和第五个参数都跟所要显示出来的具体有关,如左侧显示图片,右侧显示备注。可能我们会想,为什么

已经有了第五个参数,即那个图片和备注的R.id.xx属性的数组,那为什么还要再加上第三个参数resouce呢?有了更具体的的R.id.xx属性

那么我们就能够知道这个数组所表示的属性所在的layout布局了,也就完全没必要再给出第二个参数了。其实问题就出在这里,因为第五个

参数是一个int 类型的数组,在安卓系统根不知道这些数字到底是对应着文字或者图片。如果没有第三个参数,那么android就不知道本例

中第三个参数数组中的下标为0的对应的是图片,那么系统只能够根据第二个参数绑定的值,即

map.put("pic", R.drawable.ic_launcher);

  这行代码中的R.drawable.ic_launcher,这个值实际上是一个16进制数,在gen.具体包名.R.java中的

public static final class drawable {
        public static final int ic_launcher=0x7f020000;
        public static final int yl=0x7f020001;
    }

 这行代码中的0x7f020000这个16进制数,对应的10进制为:2130837504,那么运行这个安卓应用时显示的不是图片,而这个10进制

数:2130837504。

由此:我们要特别注意:第3,4,5个参数一一对应。如果不对应起来可能发生意想不到的结果。

 有个具体的例子的图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Adapter的一种写法 package com.xxkjx.jiusanqi; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class NewsListViewAdapter extends BaseAdapter { List<News> list; LayoutInflater inflater; Context context; public NewsListViewAdapter(List<News> list, Context context) { super(); this.list = list; this.context = context; inflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.activity_news_list_item, null); viewHolder = new ViewHolder(); viewHolder.title = (TextView) convertView .findViewById(R.id.tv_news_title); viewHolder.publish = (TextView) convertView .findViewById(R.id.tv_news_publish); viewHolder.brief = (TextView) convertView .findViewById(R.id.tv_news_brief); viewHolder.image = (ImageView) convertView .findViewById(R.id.img_news); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.title.setText(list.get(position).getTitle()); viewHolder.publish.setText(list.get(position).getPubblish()); viewHolder.brief.setText(list.get(position).getBrief()); viewHolder.image.setImageResource(list.get(position).getImg()); return convertView; } class ViewHolder { TextView title; TextView publish; TextView brief; ImageView image; } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值