Android 仿QQ好友列表功能實現

ExpandableListview

在垂直滾動展示兩級列表的的視圖。這與ListView不同,它有組對象和子對象,通過點擊組對象來單制度展開子對象的內容,它的適配器跟普通的ListView不一樣,需要繼承BaseExpandableListAdapter ,都是用來給View提供數據,展示佈局。


ExpandableListView是Android中可以實現下拉ListView的一個控件,是ListView的子類。

老規矩,先來看下效果圖:

這裏寫圖片描述
就是這麼 一個效果,有興趣的話就往下看把

1.先來看下佈局,沒有添加任何屬性

        <ExpandableListView
        android:id="@+id/mElistview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

2.隨便模擬了幾個數據

    public String[] titleStrings = {"女朋友", "女神", "基友", "小弟"};

    public String[][] nameStrings = {
            {"蒼井空", "波多野結衣", "小澤瑪莉亞", "龍澤羅拉"},
            {"鹿晗", "李易峯", "吳亦凡", "王俊凱"},
            {"張先生", "劉先生", "李先生", "杜先生", "小弟弟"},
            {"奧巴驢", "小學僧", "兒童劫", "托兒索"}
    };

3.初始化數據源

  /**
     * 初始化數據源
     */
    private void initList() {
        List<TitleInfo> mList = new ArrayList<>();
        for (int i = 0; i < titleStrings.length; i++) {
            //創建組對象
            TitleInfo info= new TitleInfo();
            //循環添加組的標題名
            info.setTitle(titleStrings[i]);
            //創建子對象數據源
            List<ContentInfo> list = new ArrayList<>();
            for (int j = 0; j < nameStrings.length; j++) {
                //創建子對象
                ContentInfo info2 = new ContentInfo();
                //添加用戶名或者頭像
                info2.setName(nameStrings[i][j]);
                //將子對象添加到數據源
                list.add(info2);
            }
            //將子對象數據源複製給組對象
            info.setInfo(list);
            //將組對象添加到總數據源中
            mList.add(info);

        }

    }

4.因爲這是一個二級列表,所以它需要一個組對象的Bean和子對象的Bean,簡潔說下參數

 TitleInfo:
    private String            title;
    private List<ContentInfo> info;
 ContentInfo:
       public String name; //名稱
    private String qianming;//簽名
    private String icon;    //頭像    

5.寫一個適配器 extens BaseExpandableListAdapter,他會返回很多方法,我已經在代碼中都註釋了
6.適配器裏面有兩個xml文件,我把它們分爲組佈局和子佈局
7.MainActivity設置適配器就可以展示基本的效果了
8.我模擬了當點擊一個組對象關閉其他組對象列表的功能,在工具類EListViewUtils.java文件中,通過調用適配器中的onGroupExpanded()方法來獲取點擊組對象的位置
9.對於處理item的點擊事件,還要設置監聽器,常用的有這麼幾個類

  • setOnChildClickListener
  • setOnGroupClickListener
  • setOnGroupCollapseListener
  • setOnGroupExpandListener
    通過方法我們就會知道功能分別是擊子選項、單擊分組項、分組合並、分組展開的監聽器。

代碼就不貼了,太多,我已經給每一行添加過註釋

項目Github地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章