欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android入門之使用SimpleAdapter實現(xiàn)復(fù)雜界面布局

 更新時間:2022年11月15日 09:52:14   作者:TGITCIC  
這篇文章主要為大家詳細(xì)介紹了Android如何使用SimpleAdapter實現(xiàn)復(fù)雜的界面布局,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Android有一定的幫助,需要的可以參考一下

介紹

上一篇里我們講到了以下這樣的一個布局

它用的就是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)文章

最新評論