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

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

我們這個例子因為要顯示3行,每一行都有1個頭像、2個TextView。因此:我們放三個Image圖片位于res\drawable目錄下。

然后我們會按照SimpleAdapter構(gòu)造函數(shù)定義兩個xml文件,一個是主UI:activity_main.xml一個是明顯模板即: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>它里面只有一個ListView,很簡單。
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">
<!-- 定義一個用于顯示頭像的ImageView -->
<ImageView
android:id="@+id/touxiang"
android:layout_width="64dp"
android:layout_height="64dp"
android:baselineAlignBottom="true"
android:paddingLeft="8dp" />
<!-- 定義一個豎直方向的LinearLayout,把QQ呢稱與說說的文本框設(shè)置出來 -->
<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>我們來看我們的前后端聯(lián)動用的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[]{"錘子哥愛砸人", "女性之友",
"睡得多死得早"};
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)部的三個元素: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) {
// 顯示用戶當(dāng)前的選擇
Log.i("app","你當(dāng)前選擇的是:"+name[position]);
}
});
}
}運行效果

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

