android中與Adapter相關的控制項----ExpandableListView

来源:http://www.cnblogs.com/huolan/archive/2016/01/18/5133123.html
-Advertisement-
Play Games

ExpandableListView(可摺疊的列表)一、ExpandableListView(可摺疊的列表)和ListView有很多地方差不多的,使用也差不多,只是他們使用適配器不一樣的,ExpandableListView使用的是ExpandableAdapter適配器,常用的有BaseExpan...


ExpandableListView(可摺疊的列表)

一、ExpandableListView(可摺疊的列表)和ListView有很多地方差不多的,使用也差不多,只是他們使用適配器不一樣的,ExpandableListView使用的是ExpandableAdapter適配器,常用的有BaseExpandableAdapter和SimpleExpandableAdapter。常用的屬性:

android:childDivider:指定各組內部子類表項之間分割線,圖片不會完全顯示,分割子列表項是一條直線。

android:childIndicator:顯示在子列表旁邊的Drawable對象,可以是一個圖像

android:childIndicatorEnd:子列表項指示符的結束約束位置

android:childIndicatorLeft:子列表項指示符的左邊約束位置

android:childIndicatorRight:子列表指示符的右邊約束位置

android:childIndicatorStart:子列表指示符的開始約束位置

android:groupIndicator:顯示在組列表旁邊的Drawable對象,可以是一個圖像

android:indicatorEnd:組列表項指示器的結束約束位置

android:indicatorLeft:組列表項指示器的左邊約束位置

 二、使用例子

adapter:

package com.example.test3;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by coder-tu on 2016/1/18.
 */
public class MyExpandabedAdapter extends BaseExpandableListAdapter {
    private Context mContext;
    private List<String> parentData;
    private List<ArrayList<Item>> childData;

    public MyExpandabedAdapter(Context mContext, List<ArrayList<Item>> childData, List<String> parentData) {
        this.mContext = mContext;
        this.childData = childData;
        this.parentData = parentData;
    }

    @Override
    public int getGroupCount() {
        return parentData.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return childData.get(i).size();
    }

    @Override
    public Object getGroup(int i) {
        return parentData.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return childData.get(i).get(i1);
    }

    @Override
    public long getGroupId(int i) {
        return i;
    }

    @Override
    public long getChildId(int i, int i1) {
        return i;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
        ViewHolder1 viewHolder1 = null;
        if (view  == null){
            viewHolder1 = new ViewHolder1();
            view = LayoutInflater.from(mContext).inflate(R.layout.parent,viewGroup,false);
            viewHolder1.textView1 = (TextView) view.findViewById(R.id.text1);
            view.setTag(viewHolder1);
        }else{
            viewHolder1 = (ViewHolder1) view.getTag();
        }
        viewHolder1.textView1.setText(parentData.get(i));
        return view;
    }

    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
        ViewHolder2 viewHolder2 = null;
        if (view == null){
            viewHolder2 = new ViewHolder2();
            view = LayoutInflater.from(mContext).inflate(R.layout.item,viewGroup,false);
            viewHolder2.imageView2 = (ImageView) view.findViewById(R.id.image2);
            viewHolder2.textView2 = (TextView) view.findViewById(R.id.text2);
            view.setTag(viewHolder2);
        }
        else{
            viewHolder2 = (ViewHolder2) view.getTag();
        }
        viewHolder2.imageView2.setImageResource(childData.get(i).get(i1).getId());
        viewHolder2.textView2.setText(childData.get(i).get(i1).getContent());
        return view;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }
    class  ViewHolder1{
        public TextView textView1;
    }
    class  ViewHolder2{
        public ImageView imageView2;
        public TextView textView2;
    }
}

佈局文件

Java文件

package com.example.test3;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity{
    private ExpandableListView expandableListView;
    private List<String> parentData;
    private List<ArrayList<Item>> childData;
    private MyExpandabedAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
        parentData = new ArrayList<>();
        parentData.add(new String("父母1"));
        parentData.add(new String("父母2"));
        parentData.add(new String("父母3"));
//        給父母1準備數據
        ArrayList<Item> arrayList1 = new ArrayList<>();
        arrayList1.add(new Item(R.mipmap.ic_launcher,"父母1--孩子1"));
        arrayList1.add(new Item(R.mipmap.ic_launcher,"父母1--孩子2"));
        arrayList1.add(new Item(R.mipmap.ic_launcher,"父母1--孩子3"));
//        給父母2準備數據
        ArrayList<Item> arrayList2 = new ArrayList<>();
        arrayList2.add(new Item(R.mipmap.ic_launcher,"父母2--孩子1"));
        arrayList2.add(new Item(R.mipmap.ic_launcher,"父母2--孩子2"));
        arrayList2.add(new Item(R.mipmap.ic_launcher,"父母2--孩子3"));
//        給父母3準備數據
        ArrayList<Item> arrayList3 = new ArrayList<>();
        arrayList3.add(new Item(R.mipmap.ic_launcher,"父母3--孩子1"));
        arrayList3.add(new Item(R.mipmap.ic_launcher,"父母3--孩子2"));
        arrayList3.add(new Item(R.mipmap.ic_launcher,"父母3--孩子3"));

        childData = new ArrayList<>();
        childData.add(arrayList1);
        childData.add(arrayList2);
        childData.add(arrayList3);
        adapter = new MyExpandabedAdapter(MainActivity.this,childData,parentData);
        expandableListView.setAdapter(adapter);
        expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View children, int parentPosition, int childPosition, long id) {
                Toast.makeText(MainActivity.this,"你好",Toast.LENGTH_LONG).show();
                return false;
            }
        });
    }
}

效果圖:

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在模擬器上調試發現獲取位置坐標信息的時候會報錯,錯誤信息: didFailWithError: Error Domain=kCLErrorDomain Code=0 “The operation couldn’t be completed. (kCLErrorDomain error 0.)”。...
  • 真機測試的過程中,出現這種Bug解決方案:手機裡面已經有了這個項目,刪除重新運行即可。
  • Eclipse和IntelliJ IDEA系的IDE都有自動生成文檔註釋的功能,Xcode雖然安裝了VVDocument,但是仍然感覺註釋的功能不是很完善,於是今天整理了一下書寫文檔註釋的一些用法。首先要說的就是文檔註釋提取的工具:主要是介紹HeaderDoc和appleDoc1.我們平常長按opt...
  • 分享SQLite語句的基礎知識,是很基礎的部分,只涉及"增","刪","改","查"4個語法.不涉及錶鏈接等內容.以後我會更新錶鏈接的隨筆. github上有一個SQL的Demo,包含增刪改查. UI如圖: url: --- >https://github.com/huyp/SQLite3_D...
  • ViewFlipper(翻轉視圖)一、ViewFlipper是一個多頁面管理的控制項,與ViewPager不同,ViewPager的是一頁一頁的的,而ViewFlipper則是一層一層的。圖片輪播或者是在App的引導頁的時候使用二、為ViewFlipper加入View的兩種方法(1)方法一:靜態導入(...
  • 一般的方式的使用靜態代碼塊。比如:public final static Map map = new HashMap(); static { map.put("key1", "value1"); map.put("key2", "value2"); } 下麵為...
  • 先說一下adb命令配置,如果遇到adb不是內部或外部命令,也不是可運行的程式或批量文件。配置下環境變數1、adb不是內部或外部命令,也不是可運行的程式或批量文件。解決辦法:在我的電腦-屬性-高級電腦配置-環境變數,系統變數找到path,把sdk的platform-tools添加進去就可以了。D:\...
  • iOS開發大部分情況下會使用到導航欄,由於我司的app導航欄需要與下麵緊挨著的視窗顏色一致,導航欄底部的橫線就會影響這個美觀,LZ使用了以下方法。覺得不錯,分享來給小伙伴們。1)聲明UIImageView變數,存儲底部橫線@interface MyViewController { UIImag...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...