接上文
上一篇文章使用的是ListView中最简单的ArrayAdapter,而且可以很容易的看出,ArrayAdapter比较适合
单一的显示一些文本信息。不过这并不表明使用ArrayAdapter不能显示图片的信息。如下:
适配器需要使用的xml文件list.xml,其中TextView必须指定id,适配器需要
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/th_notesalt" /> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000000" android:textSize="18sp" /> </LinearLayout> </LinearLayout>其他部分和上一篇文章中并没有两样,只是在创建适配器的时候略有不同:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list,R.id.text1 ,getList());//多出一个参数xml中的TextView的id显示的结果图:
<?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="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5px" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFFFF" android:textSize="10px" android:layout_gravity="center" android:gravity="center"/> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="7px" android:textColor="#31B6EF"/> </LinearLayout> </LinearLayout>MainActivity.java中的代码:
package com.example.layout_listview_simpleadapter;
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.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listView = null;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView)findViewById(R.id.list);
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.hero_list, new String[] { "title", "info", "img" },
new int[] { R.id.title, R.id.info, R.id.img });
listView.setAdapter(adapter);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "敌法师");
map.put("info", " 近卫敌法师,法师的噩梦,快速的攻击率,瞬间的blink让他在战场上来取自如!!!!");
map.put("img", R.drawable.difa);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "水晶室女");
map.put("info", " 经过寒冰泉巨魔冰冻魔法师Raishali的长年训练,Rylai善于运用令人叹为观止的禁制魔法,她的绝技是异常强大的范围杀伤技能。");
map.put("img", R.drawable.bingnv);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "痛苦女王");
map.put("info", " Akasha在被巫妖王复活成女妖之后,她成功地征服了一个魔女,并占据了她的肉身。她最喜欢用魔女的毒击和女妖的嚎叫折磨敌人,是名副其实的“痛苦女王”");
map.put("img", R.drawable.nvwang);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "地精修补匠");
map.put("info", " Boush受过最为高阶的哥布林技术的教育。那些机械系统可以帮助他在相当远的距离外杀伤对手!");
map.put("img", R.drawable.xll);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "剑圣");
map.put("info", " 他出剑似舞蹈般灵动轻盈,无论多坚固的护甲都已悄然破碎:他行动如诗歌般优雅从容,无论多强的敌人弹指间灰飞烟灭");
map.put("img", R.drawable.jiansheng);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "船长");
map.put("info", " 在近位的所有盟军中,只有一个人,在许多大陆上都有着不同但又令人生畏的名字。他的追随者们叫他COCO船长。");
map.put("img", R.drawable.chuanzhang);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "兽王");
map.put("info", " 作为野兽的朋友,Rexxar善于用他那令人不安的野性撕扯敌人,而且为了胜利,他甚至会将自己的斧头往敌人身上扔");
map.put("img", R.drawable.shouwang);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "半人马酋长");
map.put("info", " 即使以半人马的标准来衡量,他们的族长Bradwarden的身材仍然称得上是“远古巨兽”。");
map.put("img", R.drawable.qiuzhang);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "牛头人酋长");
map.put("info", " 撼地神牛,这个技艺娴熟的年轻牛头人,寻求着战斗,以创造新的传奇。");
map.put("img", R.drawable.niushao);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "全能骑士");
map.put("info", " 作为神的使者,Purist能够借助神圣力量使用各种支援与防御技能");
map.put("img", R.drawable.quanneng);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "熊猫酒仙");
map.put("info", " 他是最难以杀死的英雄之一,他的攻击迅捷而有力。他已经实在无法计算到底有多少人倒在了他的脚下。");
map.put("img", R.drawable.jiuxian);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "流浪剑客");
map.put("info", " 作为骑士和暗夜精灵的后代,Sven一出生就被放逐,从此在独处中冥想和训练自己。");
map.put("img", R.drawable.siwen);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "山岭巨人");
map.put("info", " 由Ashenra嶙峋的山脉孕育而生,Tiny可以通过投掷大量的泥石造成山崩!");
map.put("img", R.drawable.xiaoxiao);
list.add(map);
return list;
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
附上效果图:
SimpleAdapter adapter = new SimpleAdapter(this, getData(),
R.layout.hero_list, new String[] { "title", "info", "img" },
new int[] { R.id.title, R.id.info, R.id.img });
这里就是SimpleAdapter的构造,他指定了所有的数据类型为Map对象,即getData()返回的是一个Map对象