Android入門(mén)之使用SimpleAdapter實(shí)現(xiàn)復(fù)雜界面布局
介紹
上一篇里我們講到了以下這樣的一個(gè)布局

它用的就是SimpleAdapter來(lái)實(shí)現(xiàn)的。
SimpleAdapter原理
我們來(lái)看一下SimpleAdapter的實(shí)現(xiàn)
//定義Listview內(nèi)的元素內(nèi)容
private String[] name = new String[]{"雷神", "基神", "天神"};
private String[] description = new String[]{"錘子哥愛(ài)砸人", "女性之友",
"睡得多死得早"};
private int[] touxiang = new int[]{R.drawable.leishen, R.drawable.jishen,
R.drawable.tianshen};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//把所有的listItems以及內(nèi)部的三個(gè)元素:touxiang, name, description設(shè)好
List<Map<String, Object>> listItems =
new ArrayList<Map<String, Object>>();
for (int i = 0; i < name.length; i++) {
Map<String,Object> map=new HashMap<String,Object>();
map.put("touxiang",touxiang[i]);
map.put("name",name[i]);
map.put("description",description[i]);
listItems.add(map);
}
//使用SimpleAdapter造型
SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(),
listItems, R.layout.simple_adapter, new String[]{"touxiang", "name",
"description"}, new int[]{R.id.touxiang, R.id.name,
R.id.description});
ListView listView=(ListView) findViewById(R.id.listView);
listView.setAdapter(myAdapter);從代碼里我們可以看到,這個(gè)SimpleAdapter里可以含有多個(gè)元素。
在以上布局里,我們就含有以下這些元素:
- 一個(gè)ImageView
- 兩個(gè)TextView
然后套進(jìn)SimpleAdapter的構(gòu)造方法里。
SimpleAdapter使用方法詳解
SimpleAdapter需要4個(gè)參數(shù):
1.Context,可以通過(guò)AppCompatActivity的getApplicationContext()方法直接獲得;
2.一個(gè)List<Map<String,Object>>結(jié)構(gòu)
- Map里包括的就是一個(gè)控件的核心展示元素,它是以:一個(gè)key、以及這個(gè)key后對(duì)應(yīng)的值value來(lái)展示的。如:一行TextView,它的名稱(chēng)(在activity_main.xml文件中的android:id="@+id/name")就是map中的key,它的android:text=""就是它的value;
- 如果這一行控件是一個(gè)ImageView,那么此時(shí)它在這個(gè)Map里的key和value對(duì)應(yīng)的就是key為該控件的android:id="",以及該ImageView里顯示圖片用的一個(gè)int值,這個(gè)int值可以如此得到它的value:R.drawable.leishen;
- 那么一行有1個(gè)ImageView,兩個(gè)TextView。就在這個(gè)Map<String,Object>里把這3樣?xùn)|西,一個(gè)個(gè)添加進(jìn)去;
- 有多少行就是多少個(gè)Map;
3.用于在ListView內(nèi)顯示明細(xì)內(nèi)容的layout xm模板,因此整個(gè)UI端分成兩個(gè)xml,一個(gè)是:activity_main.xml在它里面只定義一個(gè)ListView。另一個(gè)就是明細(xì)模板,記得用下劃線(xiàn)_來(lái)表示,在我們這我們就用的是simple_adapter.xml文件來(lái)做這個(gè)明細(xì)模板。因此我們的1個(gè)ImageView,兩個(gè)Textview都全部放置在這個(gè)simple_adapter.xml文件內(nèi);
4.每一個(gè)供SimpleAdapter在內(nèi)部把第2點(diǎn)內(nèi)描述的這個(gè)List<Map<String,Object>>中內(nèi)容一行行取出來(lái)顯示時(shí)用到的Map結(jié)構(gòu)里的key名的字符型數(shù)組;
一旦上述過(guò)程完成后,我們只要在最外層的即在activity_main.xml文件中定義的這個(gè)ListView(<ListView android:id="@+id/listView")中使用以下代碼即可把我們的SimpleAdapter set進(jìn)去并展示
ListView listView=(ListView) findViewById(R.id.listView); listView.setAdapter(myAdapter);
我們下面通過(guò)全項(xiàng)目結(jié)構(gòu)來(lái)看,會(huì)更清晰。
工程代碼講解
項(xiàng)目結(jié)構(gòu)

我們這個(gè)例子因?yàn)橐@示3行,每一行都有1個(gè)頭像、2個(gè)TextView。因此:我們放三個(gè)Image圖片位于res\drawable目錄下。

然后我們會(huì)按照SimpleAdapter構(gòu)造函數(shù)定義兩個(gè)xml文件,一個(gè)是主UI:activity_main.xml一個(gè)是明顯模板即:simple_adapter.xml。
UI端代碼
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>它里面只有一個(gè)ListView,很簡(jiǎn)單。
simple_adapter.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">
<!-- 定義一個(gè)用于顯示頭像的ImageView -->
<ImageView
android:id="@+id/touxiang"
android:layout_width="64dp"
android:layout_height="64dp"
android:baselineAlignBottom="true"
android:paddingLeft="8dp" />
<!-- 定義一個(gè)豎直方向的LinearLayout,把QQ呢稱(chēng)與說(shuō)說(shuō)的文本框設(shè)置出來(lái) -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:textColor="#1D1D1C"
android:textSize="20sp" />
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8px"
android:textColor="#B4B4B9"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>我們來(lái)看我們的前后端聯(lián)動(dòng)用的MainActivity.java
后端代碼-MainActivity.java
package org.mk.android.demo.demosimpleadapter;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
//定義Listview內(nèi)的元素內(nèi)容
private String[] name = new String[]{"雷神", "基神", "天神"};
private String[] description = new String[]{"錘子哥愛(ài)砸人", "女性之友",
"睡得多死得早"};
private int[] touxiang = new int[]{R.drawable.leishen, R.drawable.jishen,
R.drawable.tianshen};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//把所有的listItems以及內(nèi)部的三個(gè)元素:touxiang, name, description設(shè)好
List<Map<String, Object>> listItems =
new ArrayList<Map<String, Object>>();
for (int i = 0; i < name.length; i++) {
Map<String,Object> map=new HashMap<String,Object>();
map.put("touxiang",touxiang[i]);
map.put("name",name[i]);
map.put("description",description[i]);
listItems.add(map);
}
//使用SimpleAdapter造型
SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(),
listItems, R.layout.simple_adapter, new String[]{"touxiang", "name",
"description"}, new int[]{R.id.touxiang, R.id.name,
R.id.description});
ListView listView=(ListView) findViewById(R.id.listView);
listView.setAdapter(myAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 顯示用戶(hù)當(dāng)前的選擇
Log.i("app","你當(dāng)前選擇的是:"+name[position]);
}
});
}
}運(yùn)行效果

我們?cè)谶@個(gè)界面上點(diǎn)擊不同行時(shí),我們可以看到控制臺(tái)進(jìn)行了相應(yīng)的:當(dāng)前選擇行內(nèi)容的打印。
到此這篇關(guān)于Android入門(mén)之使用SimpleAdapter實(shí)現(xiàn)復(fù)雜界面布局的文章就介紹到這了,更多相關(guān)Android SimpleAdapter復(fù)雜界面布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android EditText實(shí)現(xiàn)關(guān)鍵詞批量搜索示例
本篇文章主要介紹了Android EditText實(shí)現(xiàn)關(guān)鍵詞批量搜索示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Android中再按一次退出提醒實(shí)現(xiàn)的兩種方法
今天小編就為大家分享一篇關(guān)于Android中再按一次退出提醒實(shí)現(xiàn)的兩種方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
Android?Studio實(shí)現(xiàn)帶三角函數(shù)對(duì)數(shù)運(yùn)算功能的高級(jí)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)帶三角函數(shù)對(duì)數(shù)運(yùn)算功能的高級(jí)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android adb logcat 命令查看日志詳細(xì)介紹
這篇文章主要介紹了Android adb logcat 命令詳細(xì)介紹的相關(guān)資料,這里對(duì)logcat 命令進(jìn)行了詳細(xì)介紹,并介紹了過(guò)濾日志輸出的知識(shí),需要的朋友可以參考下2016-12-12
Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例
這篇文章主要介紹了Android項(xiàng)目實(shí)戰(zhàn)(二十八):使用Zxing實(shí)現(xiàn)二維碼及優(yōu)化實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11
Android利用懸浮按鈕實(shí)現(xiàn)翻頁(yè)效果
這篇文章主要介紹了Android利用懸浮按鈕實(shí)現(xiàn)翻頁(yè)效果的相關(guān)資料,需要的朋友可以參考下2015-12-12
Android ContentProvider的實(shí)現(xiàn)及簡(jiǎn)單實(shí)例代碼
這篇文章主要介紹了Android ContentProvider的實(shí)現(xiàn)及簡(jiǎn)單實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android實(shí)現(xiàn)可點(diǎn)擊展開(kāi)的TextView
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可點(diǎn)擊展開(kāi)的TextView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

