色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Adapter基礎講解

jf_12114301 ? 來源:jf_12114301 ? 作者:jf_12114301 ? 2023-03-31 18:22 ? 次閱讀

這一節(jié)我們要講的UI控件都是跟Adapter(適配器)打交道的,了解并學會使用Adapter很重要, Adapter是用來幫助填充數據的中間橋梁,簡單來說就是:將各種數據以合適的形式顯示到view上,提供 給用戶看!

1.MVC模式的簡單理解

在開始學習Adapter之前我們要來了解下這個MVC模式概念。 舉個例子:大型的商業(yè)程序通常由多人一同開發(fā)完成,比如有人負責操作接口的規(guī)劃與設計, 有人負責程序代碼的編寫,如果要能夠做到程序項目的分工就必須在程序的結構上做合適的安排 。如果接口設計與修改都涉及到程序代碼的改變的話,那么兩者的分工就會造成執(zhí)行上的困難, 良好的程序架構師將整個程序項目劃分為如圖的三個部分:

poYBAGQlkmeAVlMUAABJnbI_nSY933.png

Model:通常可以理解為數據,負責執(zhí)行程序的核心運算與判斷邏輯,,通過view獲得用戶 輸入的數據,然后根據從數據庫查詢相關的信息,最后進行運算和判斷,再將得到的結果交給view來顯示

view:用戶的操作接口,說白了就是GUI,應該使用哪種接口組件,組件間的排列位置與順序都需要設計

Controller:控制器,作為model與view之間的樞紐,負責控制程序的執(zhí)行流程以及對象之間的一個互動

Adapter則是中間的這個Controller的部分:Model(數據) --->Controller(以什么方式顯示到)--->View(用戶界面) 這就是簡單MVC組件的簡單理解!

2.Adapter概念解析

首先我們來看看他的繼承結構圖:

pYYBAGQlkmiACdutAAB8ERKWqVU057.png

上面就是Adapter以及繼承結構圖了,接著我們介紹一下實際開發(fā)中還用到的幾個Adapter吧!

BaseAdapter:抽象類,實際開發(fā)中我們會繼承這個類并且重寫相關方法,用得最多的一個Adapter!

ArrayAdapter:支持泛型操作,最簡單的一個Adapter,只能展現(xiàn)一行文字~

SimpleAdapter:同樣具有良好擴展性的一個Adapter,可以自定義多種效果!

SimpleCursorAdapter:用于顯示簡單文本類型的listView,一般在數據庫那里會用到,不過有點過時, 不推薦使用!

3.代碼示例:

好的,多說無益,寫代碼最實際,接下來我們來用寫幾個簡單的Adapter實例, 幫助我們了解Adapter給我們帶來的便利,另外,因為Adapter需要結合ListView, GridView等等控件講解,一些高級一點的用法我們都放在ListView那里講!

1)ArrayAdapter使用示例:

運行效果圖:

poYBAGQlkmiAJRg4AAAbcn8BKYE235.png

代碼實現(xiàn):

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //要顯示的數據
        String[] strs = {"基神","B神","翔神","曹神","J神"};
        //創(chuàng)建ArrayAdapter
        ArrayAdapter adapter = new ArrayAdapter
                (this,android.R.layout.simple_expandable_list_item_1,strs);
        //獲取ListView對象,通過調用setAdapter方法為ListView設置Adapter設置適配器
        ListView list_test = (ListView) findViewById(R.id.list_test);
        list_test.setAdapter(adapter);
    }
}

一些相關的東西:

1.除了通過數組外,我們還可以寫到一個數組資源文件中:

比如:在resvaluse下創(chuàng)建一個數組資源的xml文件:arrays.xml

   
  
      
    語文  
    數學  
    英語  
          

接著布局的listview屬性設置下這個列表項:


就可以了~

當然我們也可以在Java代碼中這樣寫:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
        R.array.myarray,android.R.layout.simple_list_item_multiple_choice );

同樣也是可以的!

2.一開始也說了這個ArrayAdapter支持泛型,那么集合必不可少啦,比如,這樣寫:

List data = new ArrayList();
data.add("基神");
data.add("B神");
ArrayAdapter adapter = new ArrayAdapter
                (this,android.R.layout.simple_expandable_list_item_1,data);

就可以了~

3.我們看到了在實例化ArrayAdapter的第二個參數android.R.layout.simple_expandable_list_item_1其實這些是系統(tǒng)給我們提供好的一些ListView模板。

2)SimpleAdapter使用示例:

SimpleAdapter:簡單的Adapter,看似簡單,功能強大,下面我們來寫個稍微復雜一點的列表 布局吧!

運行效果圖:

pYYBAGQms4OAcfWTAABS0sEnOg0705.png

代碼實現(xiàn):

先來編寫一個列表項目每一項的布局:

list_item.xml

 


     
    

     
    

        

        

    


接下來是MainActivity.java:

public class MainActivity extends AppCompatActivity {

    private String[] names = new String[]{"B神", "基神", "曹神"};
    private String[] says = new String[]{"無形被黑,最為致命", "大神好厲害~", "我將帶頭***~"};
    private int[] imgIds = new int[]{R.mipmap.head_icon1, R.mipmap.head_icon2, R.mipmap.head_icon3};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List> listitem = new ArrayList>();
        for (int i = 0; i < names.length; i++) {
            Map showitem = new HashMap();
            showitem.put("touxiang", imgIds[i]);
            showitem.put("name", names[i]);
            showitem.put("says", says[i]);
            listitem.add(showitem);
        }

        //創(chuàng)建一個simpleAdapter
        SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(), listitem, R.layout.list_item, new String[]{"touxiang", "name", "says"}, new int[]{R.id.imgtou, R.id.name, R.id.says});
        ListView listView = (ListView) findViewById(R.id.list_test);
        listView.setAdapter(myAdapter);
    }
}

3)SimpleCursorAdapter使用示例:

雖然這東西過時了,不過對于不怎么會SQLite的初學者來說,用起來還是蠻方便的! 記得前面我們學ContentProivder寫過的讀取聯(lián)系人的例子么?之前是通過打印Log的 方式顯示出來,現(xiàn)在我們通過這個SimpleCursorAdapter把它顯示到ListView上!

實現(xiàn)效果圖:

poYBAGQlkmqAExOqAABzm9Adr2A970.png

代碼實現(xiàn)

先寫下listView每個item的布局:

list_item.xml:

 



    

    


接著activity_main布局和前面的一樣,就是簡單的ListView,然后是

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list_test = (ListView) findViewById(R.id.list_test);
        //讀取聯(lián)系人
        Cursor cursor = getContentResolver()
                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        SimpleCursorAdapter spcAdapter = new SimpleCursorAdapter(this,R.layout.list_item,cursor,
                new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER},
                new int[]{R.id.list_name,R.id.list_phone});
        list_test.setAdapter(spcAdapter);
    }
}

最后AndroidManifest.xml里加個讀聯(lián)系人的權限就可以了!


一問一答:

:就這么簡單?——答:是的,直接獲取到Cursor,然后綁定就好了,無需你自己再寫什么SQL語句!:你說這東西過時了,那拿什么來代替?——答:一般的做法是自己重寫B(tài)aseAdapter,獲取到數據集合后跟對應的控件進行綁定!:這個SimpleCursorAdapter還有沒有要注意的地方?——答:有,使用SimpleCursorAdapter的話,綁定的數據庫表中一定要有id這個字段, 或者asid;而且在綁定時取出的數據必須包含這個id項,否則的話會報以下錯誤!java.lang.IllegalArgumentException: column 'id' does not exist**

審核編輯黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151763
  • Adapter
    +關注

    關注

    0

    文章

    16

    瀏覽量

    7665
  • VIEW
    +關注

    關注

    0

    文章

    7

    瀏覽量

    9962
  • MVC
    MVC
    +關注

    關注

    0

    文章

    73

    瀏覽量

    13891
收藏 人收藏

    評論

    相關推薦

    tcpip_adapter_start_api 函數的功能是什么?

    #define TCPIP_ADAPTER_IPC_CALL(_if, _mac, _ip, _data, _fn) do { tcpip_adapter_api_msg_t msg
    發(fā)表于 06-26 07:08

    adapter模式是如何去定義的

    adapter模式定義adapter 將一個類的接口轉換成客戶希望的另外一個接口。使用場景,兩個類所做的事情相同或者相似,但是具有不同的接口時要使用它。target這是客戶所期望的接口,目標可以
    發(fā)表于 01-03 06:54

    不能同時使用lpuart_adapter和uart_adapter嗎?

    與 RS485 收發(fā)器一起使用。 過去,我已經編寫了一個簡單的代碼來使用 uart_adapter 通過帶有緩沖區(qū)機制的 UART 發(fā)送和獲取字節(jié)。然后在 MCUExpresso 上,在 SDK 組件上,我添加
    發(fā)表于 03-24 07:36

    PL2303 USB to Serial Adapter

    The PL2303 USB to Serial adapter is your smart and convenient accessory forconnecting RS-23
    發(fā)表于 10-15 17:58 ?111次下載

    TOOLSTICK DEBUG ADAPTER USER’S

    TOOLSTICK DEBUG ADAPTER USER’S GUIDE:To enable development, the ToolStick Base Adapter and daughter
    發(fā)表于 09-09 12:39 ?6次下載

    iPod USB Power Adapter

    iPod USB Power AdapterThe iPod USB Power Adapter is for use withiPod shuffle, and with all iPods with DockConnectors.
    發(fā)表于 12-10 15:06 ?53次下載

    Interface Test Adapter (ITA) H

    DescriptionThe HP9421A Interface Test Adapter (ITA) providesconnections to and from the unit under
    發(fā)表于 07-09 17:36 ?8次下載

    什么是Host bus adapter

    什么是Host bus adapter  英文縮寫: Host bus adapter 中文譯名: 主機總線適配器 分  類: 網絡與交換 解  釋:
    發(fā)表于 02-23 10:03 ?1298次閱讀

    MERCURY Wireless N Adapter_1021.

    MERCURY Wireless N Adapter_1021.4.928.2012_5.1_x86驅動文件
    發(fā)表于 11-04 15:53 ?33次下載

    dfrobotUSB Serial Light Adapter下載器簡介

    USB Serial Light Adapter下載器用來對Arduino FIO/pro/mini、lilypad Arduino、x-board等模塊進行程序下載。
    的頭像 發(fā)表于 12-13 15:00 ?1392次閱讀
    dfrobotUSB Serial Light <b class='flag-5'>Adapter</b>下載器簡介

    adapter模式-手機電源適配例子

    adapter模式定義adapter 將一個類的接口轉換成客戶希望的另外一個接口。使用場景,兩個類所做的事情相同或者相似,但是具有不同的接口時要使用它。target 這是客戶所期望的接口,目標可以
    發(fā)表于 01-12 11:47 ?0次下載
    <b class='flag-5'>adapter</b>模式-手機電源適配例子

    GD-Link Adapter 用戶 指南

    GD-Link Adapter 用戶 指南
    發(fā)表于 02-23 18:55 ?3次下載
    GD-Link <b class='flag-5'>Adapter</b> 用戶 指南

    QUAD-SOIC-ADAPTER-EVM用戶指南

    電子發(fā)燒友網站提供《QUAD-SOIC-ADAPTER-EVM用戶指南.pdf》資料免費下載
    發(fā)表于 11-18 14:21 ?0次下載
    QUAD-SOIC-<b class='flag-5'>ADAPTER</b>-EVM用戶指南

    TSSOP-VSSOP-ADAPTER-EVM用戶指南

    電子發(fā)燒友網站提供《TSSOP-VSSOP-ADAPTER-EVM用戶指南.pdf》資料免費下載
    發(fā)表于 11-20 11:45 ?0次下載
    TSSOP-VSSOP-<b class='flag-5'>ADAPTER</b>-EVM用戶指南

    SOIC-ADAPTER-EVM用戶指南

    電子發(fā)燒友網站提供《SOIC-ADAPTER-EVM用戶指南.pdf》資料免費下載
    發(fā)表于 11-20 11:46 ?0次下載
    SOIC-<b class='flag-5'>ADAPTER</b>-EVM用戶指南
    主站蜘蛛池模板: 5g在视影讯天天5g免费观看 | 欧美6O老妪与小伙交 | 日本久久不射 | 666永久视频在线 | 孕妇高潮抽搐喷水30分钟 | 亚洲精品成人 | 色一欲一性一乱一区二区三区 | 2021国产精品一卡2卡三卡4卡 | 日日天干夜夜狠狠爱 | 成人在线免费观看 | 717影院理论午夜伦不卡久久 | 欧美乱妇日本无乱码特黄大片 | 亚洲免费中文 | 一个人免费视频在线观看 | 国产中文欧美日韩在线 | 精品高潮呻吟99AV无码视频 | 久久九九精品国产自在现线拍 | 色宅男看片午夜大片免费看 | 99久久精品免费看国产免费 | 亚洲青青青网伊人精品 | 国产午夜亚洲精品不卡电影 | 亚洲国产精品久久无套麻豆 | 岛国大片在线观看免费版 | 钉钉女老师 | 成人欧美一区二区三区白人 | 亚洲狠狠网站色噜噜 | 亚洲色大成网站WWW永久麻豆 | 久久日本精品国产精品 | 伦理电影2499伦理片 | 国产成人午夜精品免费视频 | 在线观看亚洲免费人成网址 | 麻豆久久国产亚洲精品超碰热 | 中文乱码35页在线观看 | 宝贝好紧好爽再搔一点试視頻 | 一区视频免费观看 | 女子叉开腿让男子桶免费软件 | 在线观看免费国产成人软件 | 亚洲视频中文字幕在线观看 | 1788福利视频在视频线 | 久久99精品国产99久久6男男 | 1788福利视频在视频线 |