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
然后套進(jìn)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)|西,一個個添加進(jì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進(jìn)去并展示
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]); } }); } }
運行效果
我們在這個界面上點擊不同行時,我們可以看到控制臺進(jìn)行了相應(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-02Android?Studio實現(xiàn)帶三角函數(shù)對數(shù)運算功能的高級計算器
這篇文章主要為大家詳細(xì)介紹了Android?Studio實現(xiàn)帶三角函數(shù)對數(shù)運算功能的高級計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05Android adb logcat 命令查看日志詳細(xì)介紹
這篇文章主要介紹了Android adb logcat 命令詳細(xì)介紹的相關(guān)資料,這里對logcat 命令進(jìn)行了詳細(xì)介紹,并介紹了過濾日志輸出的知識,需要的朋友可以參考下2016-12-12Android項目實戰(zhàn)(二十八):使用Zxing實現(xiàn)二維碼及優(yōu)化實例
這篇文章主要介紹了Android項目實戰(zhàn)(二十八):使用Zxing實現(xiàn)二維碼及優(yōu)化實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-11-11Android ContentProvider的實現(xiàn)及簡單實例代碼
這篇文章主要介紹了Android ContentProvider的實現(xiàn)及簡單實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02