Android可扩展列表视图片段

2024-04-25

我正在寻找具有可扩展列表视图的片段。搜索后我发现了一个实现可扩展列表视图片段的类https://gist.github.com/1316903 https://gist.github.com/1316903。但我不知道如何使用它。请帮我。我尝试了列表片段,但我不知道如何使用具有可扩展列表视图的片段,提前致谢。


这是我在 MonoDroid/C# 中得到的。我不得不删除一些代码(为了保密),但它应该大部分是完整的。

此实现可以支持不同的子视图,其中每个组包含在整个组中相同的特定子类型。但是,您可以在组内混合子类型,甚至可以具有不同的组类型(这实际上只是更改组标题;我对两个组使用相同的组类型,并使用组的位置来确定子类型)类型 - 因此 group[0] 包含 ExpandableListChild1 的子级和 ExpandableListChild2 的 group[1] - 正如预期用途)。

这里的子类型仅在背景颜色上有所不同(为了简单起见),但是这些视图可以是您需要的任何视图,包括自定义视图。只需为您需要的任何视图创建一个相应的 ExpandListChild 子类即可。此外,基类 ExpandListChildAbs 可以是适合您的应用程序所需的任何内容。如果您只有一个子类型,则不需要基类,但是如果有两个或多个子类型,则您需要某种基类,两个子类型都可以从其子类化,以支持 BaseExpandableListAdapter 方法 getChild 和相关方法中的多态性。

[Activity(
    Label = "ExpandableListView in a Fragment", 
    Theme = "@android:style/Theme.NoTitleBar", 
    MainLauncher = false,
    ConfigurationChanges = ConfigChanges.KeyboardHidden,
    WindowSoftInputMode = SoftInput.AdjustPan | SoftInput.StateHidden)] 

public class Fragment1 : Fragment
{
    private ViewGroup _thisView;       

    private Bundle _bundle;
    private LayoutInflater _inflater;
    private ViewGroup _container;

    public override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);          

        _bundle = bundle;
        _model = Model;
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
    {
        base.OnCreateView(inflater, container, bundle);

        _inflater = inflater;
        _container = container;
        _bundle = bundle;

         Render();

        return _thisView;
    }        

    public override void OnAttach(Activity activity)
    {
        base.OnAttach(activity);

        _dialogListener = (IDialogWindow)activity;
    }                

    //public Context LocalContext { get; set; }

    public override void OnActivityCreated(Bundle savedInstanceState)
    {
        base.OnActivityCreated(savedInstanceState);            
    }

    public override void OnViewCreated(View view, Bundle savedInstanceState)
    {
        base.OnViewCreated(view, savedInstanceState);            
    }

    public override void Render()
    {   
        _thisView = (ViewGroup)_inflater.Inflate(Resource.Layout.MainLayout, _container, false);

        ExpandableListView elvParcelInfo = _thisView.FindViewById<ExpandableListView>(Resource.Id.elv_parcel_info);
        List<ExpandListGroup> expandListItems = SetStandardGroups();
        ExpandListAdapter expandListAdapter = new ExpandListAdapter(Activity.ApplicationContext, expandListItems);
        elvParcelInfo.SetAdapter(expandListAdapter);
    }

    public List<ExpandListGroup> SetStandardGroups()
    {
        List<ExpandListChild1> childern1 = new List<ExpandListChild1>();

        for (int i = 0; i < 20; i++)
        {
            ExpandListChild1 child1 = new ExpandListChild1();
            child1.Name = "child1 #" + i.ToString();
            child1.Tag = null;

            childern1.Add(child1);
        }

        ExpandListGroup group1 = new ExpandListGroup();
        group1.Name = "Comedy";
        //group1.Items = childern1;
        group1.Items = new List<ExpandListChildAbs>();
        foreach (ExpandListChild1 child1 in childern1)
        {
            group1.Items.Add(child1);
        }

        /////////////////////////////////////////////////////////////

        List<ExpandListChild2> childern2 = new List<ExpandListChild2>();

        for (int i = 0; i < 20; i++)
        {
            ExpandListChild2 child2 = new ExpandListChild2();
            child2.Name = "child2 #" + i.ToString();
            child2.Tag = null;

            childern2.Add(child2);
        }

        ExpandListGroup group2 = new ExpandListGroup();
        group2.Name = "Action";
        //group2.Items = childern2;
        group2.Items = new List<ExpandListChildAbs>();
        foreach (ExpandListChild2 child2 in childern2)
        {
            group2.Items.Add(child2);
        }

        /////////////////////////////////////////////////////////////

        List<ExpandListGroup> groups = new List<ExpandListGroup>();
        groups.Add(group1);
        groups.Add(group2);

        return groups;
    }

    public abstract class ExpandListChildAbs : Java.Lang.Object
    {
        public abstract String Name { get; set; }
        public abstract String Tag { get; set; }
    }

    public class ExpandListChild1 : ExpandListChildAbs
    {
        public override String Name { get; set; }
        public override String Tag { get; set; }
    }

    public class ExpandListChild2 : ExpandListChildAbs
    {
        public override String Name { get; set; }
        public override String Tag { get; set; }
    }

    public class ExpandListGroup : Java.Lang.Object
    {
        public String Name { get; set; }
        public List<ExpandListChildAbs> Items { get; set; }
    }

    public class ExpandListAdapter : BaseExpandableListAdapter
    {
        private enum ChildTypes { ChildType1, ChildType2 }
        private Context context;
        private List<ExpandListGroup> groups;

        public ExpandListAdapter(Context context, List<ExpandListGroup> groups) 
        {
            this.context = context;
            this.groups = groups;
        }

        public void AddItem(ExpandListChildAbs item, ExpandListGroup group) 
        {                              
            if (!groups.Contains(group)) 
            {
                groups.Add(group);
            }

            int index = groups.IndexOf(group);

            List<ExpandListChildAbs> ch = groups[index].Items;

            ch.Add(item);
            groups[index].Items = ch;
        }

        public override bool HasStableIds
        {
            get { return true; }
        }

        public override bool IsChildSelectable(int arg0, int arg1)
        {
            return true;
        }

        //______________________________________________________________________________________________________
        // Get Child Methods
        //______________________________________________________________________________________________________

        public override long GetChildId(int groupPosition, int childPosition)
        {
            return childPosition;                
        }

        public override int GetChildrenCount(int groupPosition)
        {
            List<ExpandListChildAbs> chList = groups[groupPosition].Items;               

            return chList.Count;
        }

        public override int ChildTypeCount
        {
            get { return Enum.GetNames(typeof(ChildTypes)).Length; }
        }

        public override int GetChildType(int groupPosition, int childPosition)
        {   
            //return base.GetChildType(groupPosition, childPosition);

            if (groupPosition == 0)
            {
                return (int)ChildTypes.ChildType1;
            }

            if (groupPosition == 1)
            {
                return (int)ChildTypes.ChildType2;
            }

            return 0;
        }

        public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
        {
            List<ExpandListChildAbs> chList = groups[groupPosition].Items;

            return chList[childPosition];
        }

        public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View view, ViewGroup parent)
        {
            int ChildType = GetChildType(groupPosition, childPosition);

            if (ChildType == (int)ChildTypes.ChildType1)
            {
                return GetChildView_ChildType1(groupPosition, childPosition, isLastChild, view, parent);
            }

            if (ChildType == (int)ChildTypes.ChildType2)
            {
                return GetChildView_ChildType2(groupPosition, childPosition, isLastChild, view, parent);
            }

            return null;
        }

        private View GetChildView_ChildType1(int groupPosition, int childPosition, bool isLastChild, View view, ViewGroup parent)
        {   
            ExpandListChild1 child1 = (ExpandListChild1)GetChild(groupPosition, childPosition);

            if (view == null)
            {
                LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);

                view = infalInflater.Inflate(Resource.Layout.ExpandList_ChildItem1, null);
            }

            TextView tv = view.FindViewById<TextView>(Resource.Id.tvChild1);

            tv.Text = child1.Name;
            tv.Tag = child1.Tag;

            return view;
        }

        private View GetChildView_ChildType2(int groupPosition, int childPosition, bool isLastChild, View view, ViewGroup parent)
        {
            ExpandListChild2 child2 = (ExpandListChild2)GetChild(groupPosition, childPosition);

            if (view == null)
            {
                LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);

                view = infalInflater.Inflate(Resource.Layout.ExpandList_ChildItem2, null);
            }

            TextView tv = view.FindViewById<TextView>(Resource.Id.tvChild2);

            tv.Text = child2.Name;
            tv.Tag = child2.Tag;

            return view;
        }

        //________________________________________________________________________________________________________


        //______________________________________________________________________________________________________
        // Get Group Methods
        //______________________________________________________________________________________________________

        public override long GetGroupId(int groupPosition)
        {
            return groupPosition;
        }

        public override int GroupCount
        {
            get { return groups.Count; }
        }

        public override int GroupTypeCount 
        { 
            get { return base.GroupTypeCount; } 
        }

        public override int GetGroupType(int groupPosition)
        {
            return base.GetGroupType(groupPosition);
        }

        public override Java.Lang.Object GetGroup(int groupPosition)
        {
            return groups[groupPosition];
        }

        public override View GetGroupView(int groupPosition, bool isLastChild, View view, ViewGroup parent) 
        {
            ExpandListGroup group = (ExpandListGroup) GetGroup(groupPosition);

            if (view == null) 
            {
                LayoutInflater inf = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);

                view = inf.Inflate(Resource.Layout.ExpandList_GroupItem, null);
            }

            TextView tv = view.FindViewById<TextView>(Resource.Id.tvGroup);

            tv.Text = group.Name;

            return view;
        }

        //________________________________________________________________________________________________________
    }      
}

主布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/ll_left_parcel"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:background="#FF8F8D8F">     

  <ExpandableListView
    android:id="@+id/elv_parcel_info"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#FFCFCDCF"
    android:groupIndicator="@null"/>  

</LinearLayout>

展开列表_组项

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="55dip"
    android:background="#FF00AA55"
    android:orientation="vertical" >


  <TextView
      android:id="@+id/tvGroup"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_marginRight="15dp"
      android:textColor="#FF000000"
      android:textSize="17dip" />

</LinearLayout>

展开列表_子项1

<?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="55dip"
    android:background="#FF8800CC"
    android:orientation="vertical" >

  <TextView
      android:id="@+id/tvChild1"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:textColor="#FF000000"
      android:textSize="17dip" />

</LinearLayout>

展开列表_子项2

<?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="55dip"
    android:background="#FFAA00FF"
    android:orientation="vertical" >

  <TextView
      android:id="@+id/tvChild2"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:textColor="#FF000000"
      android:textSize="17dip" />

</LinearLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android可扩展列表视图片段 的相关文章

  • 所有任务完成后继续任务

    在某些类中 我想使用 Task 异步加载 2 个集合并停止 busyindicator 我尝试这样的事情 var uiScheduler TaskScheduler FromCurrentSynchronizationContext Wai
  • 获取带有注释的所有类并将它们添加到 android 中的 hashMap

    我不确定这是否可能 但我基本上希望能够轻松地将新项目添加到列表中 只需添加带有特殊注释的类即可 我能想到的唯一例子就是我目前正在做的事情 用户可以完成很多 挑战 目前我的应用程序中有一个用于 挑战 的包 我希望能够在该包中创建一个新类 给它
  • AppCompatActivity 中的 setListAdapter

    我有一个具有功能的程序listArray with extends AppCompatActivity但我的代码有错误 my code 新闻活动 public class NewsActivity extends AppCompatActi
  • 如何使用保存实例状态来保存活动状态?

    我一直在研究Android SDK平台 并且不太清楚如何保存应用程序的状态 因此 考虑到对 Hello Android 示例的这个小改动 package com android hello import android app Activi
  • Sense 手机上的 Android 应用程序主题

    我在有关感应手机上的应用程序的 UI 项目上遇到了障碍 我无法在谷歌或SO上制作搜索查询来找到我所追求的任何参考 有没有办法让我的应用程序主题的 UI 样式与手机当前应用的样式相匹配 我基本上追求不同 UI 小部件 复选框 微调器 按钮等
  • JavaScript接口注入漏洞修复

    我收到了来自 Google Play 管理中心的警告 提示我这一页 https support google com faqs answer 9095419因为我在我的应用程序中使用了 JavaScript 接口 并建议两个选项来解决该问题
  • 动态改变ListView中TextView字体颜色

    我正在将 XML 文档绑定到自定义适配器 列表中的所有项目最初的字体颜色均为白色 XML 文档中的一个节点有一个我正在检查的属性 如果设置了该属性 我想将 ListView 中该项目的字体颜色更改为较深的颜色 我的代码似乎最初可以工作 但是
  • 文件路径在棒棒糖android中始终返回null

    这是我从内部存储 画廊 获取图像时的代码 在棒棒糖文件路径中返回始终为空 if requestCode PICK IMAGE if resultCode RESULT OK image successfully picked launchi
  • 在 Phonegap InAppBrowser 中显示加载指示器

    当使用以下代码加载页面时 我尝试在 Phonegap InAppBrowser 中显示加载指示器 var ref ref window open http www google com top location no ref addEven
  • 如何在android中动态添加项目到listview

    有谁能够帮助我 我正在尝试在 Android 中创建一个 ListView 并且我正在尝试使用代码 不使用 XML 将项目加载到其中 这是我到目前为止的代码 tweetList ListView this findViewById R id
  • 启动时启动服务但不进行任何活动

    我想创建一个仅包含服务 无活动 的应用程序 该服务必须在启动时启动 我的问题是 如果没有活动 启动接收器似乎不会调用 我用下面的例子进行了测试 我有不同的文件 MyReceiver java package com test teststa
  • 相机 java.lang.RuntimeException:setParameters 失败

    我使用创建了一个自定义相机应用程序this https github com davidgatti dgCam源代码 但在少数设备上 例如高分辨率设备 我得到 RuntimeException setParameters failed 我面
  • BitmapFactory.decodeResource 返回空值

    我试图从视图对象中的内部资源加载位图 源本身位于 可绘制 文件中 代码是 import android content Context import android graphics Bitmap import android graphi
  • 为什么找不到ImageView类?

    当我转到图形布局时 我在创建第一个 Android 应用程序 pdf Android Application Development for For Dummies 中的静默切换模式 时遇到了麻烦 在 main xml 文件中插入了 Ima
  • 无法加载(查找)j2v8_android_x86 库

    我有一个使用的 gradle 项目j2v8 android 2 2 1 http mvnrepository com artifact com eclipsesource j2v8 j2v8 android 2 2 1库 为 V8 JS 引
  • Android 中识别点击的图像区域?

    有没有办法在 Android 应用程序中确定用户单击了 ImageView 的哪个区域 例如 x y 坐标 谢谢 查看运动事件 http developer android com intl de reference android vie
  • 使用 Android 将文本文件上传到 Google Drive

    编辑 我已将文本设置为字符串 如下所示 字符串文本 你好 我想将其转换为纯文本文件 然后上传到 Google 云端硬盘文件夹 我已经尝试过下面的代码 但它不完整 所以我无法说出出现了什么错误 我正在使用 Google Drive 快速启动
  • 检测 Android 中 OSM Mapview 是否仍在加载

    我已将 Open Street Maps 包含在我的 Android 应用程序中 在地图视图中 用户应该能够在地图完全加载后捕获屏幕 但目前 即使地图视图仍在加载 用户也可以捕获图像 有人可以告诉我如何检测地图视图何时完全加载吗 下面是我加
  • 尝试初始化 AudioRecord 时出现“无法获取记录源 1 的音频输入”

    当尝试初始化 AudioRecord 对象并尝试使用 Eclipse 使用模拟器录制声音时 我不断收到此错误 我尝试过各种位采样率 8000 是唯一有效的 但错误仍然出现 我尝试过各种版本的sdk 1 5 1 6 2 2 2和2 3 1 以
  • setShadowLayer Android API 差异

    我为我的应用程序开发了一个自定义视图组件 并且正在努力向圆圈添加阴影 这是我的类扩展 View 的代码 public class ChartView extends View public ChartView Context context

随机推荐

  • 使用mongoose在mongodb模式中使用ensureIndex

    我想打电话ensureIndex on the authorName 命令是什么以及我应该将其放在这段代码中的什么位置 var mongoose require mongoose defines the database schema fo
  • seo - 图像和 h1

    我遇到一种情况 我想坚持使用我的徽标而不是 h1 标签的实际文本 如果我将关键字放在 alt 标签中 而不是实际编写 我会在 SEO 上受到影响吗 文本和图像同时存在更好吗 想法 div h1 a href img src logo jpg
  • Spark 编码器:何时使用 beans()

    我在使用Spark的缓存机制时遇到了内存管理问题 我目前正在使用Encoder我正在使用 Kryo 想知道切换到 beans 是否可以帮助我减少缓存数据集的大小 基本上 在使用时使用 beans 相对于 Kryo 序列化有哪些优点和缺点En
  • 已将数据预先填充到资产中的领域?

    通常我使用 Realm 作为 RealmConfiguration config new RealmConfiguration Builder applicationContext deleteRealmIfMigrationNeeded
  • 匹配嵌套的html注释块正则表达式[重复]

    这个问题在这里已经有答案了 我有这个 html 代码块 some html content here top base some html content here 1 top some html content here 2 top so
  • Magento Connect 登录后尝试更改为什么路径?

    我每次都会收到错误消息 部署 FTP 错误 登录后无法 chdir 我通过 chmod ing 我的 complete path to magento installation dir 成功完成了第一次连接和设置下载器 至 0777 在 d
  • Apache Tomcat 服务器不在添加新服务器的列表中

    我需要添加 Apache Tomcat 服务器 但 Apache 文件夹中只有 Geronimo 服务器 如何解决这个问题 STS 4 0 0 0 M12 STS4 发行版不包含这些开箱即用的适配器 因为我们出于各种原因 减少启动时间 减小
  • Angular 2 - 使用共享服务

    看起来共享服务是解决许多情况的最佳实践 例如组件之间的通信或替换旧的 Angular 1 的 rootscope 概念 我正在尝试创建我的服务 但它不起作用 有什么帮助吗 泰 应用程序组件 ts import Component from
  • 哪里可以下载 Microsoft.Phone.WinJS.2.1?

    我正在尝试使用 WinJS 制作通用 Windows 应用程序 我已经下载了VS2013的最新更新 RC 版本 我已经安装了我能找到的所有 SDK 我还安装了 WinLibJS VSE exe 扩展 有趣的是 VS 更新一直说我没有 当我打
  • 打印时字体颜色发生变化

    我这里有一个非常令人困惑的问题 我有一个动态构建的表 这里可能是一个不重要的事实 但只是让你知道 在网页上 我根据逻辑标准将文本设置为特定颜色 在页面上 看起来很棒 当进行打印预览 和实际打印 时 颜色有很大不同 在我的代码中 颜色是 红色
  • Laravel 通过表名获取模型

    有没有办法通过表名获取模型 例如 我有一个 用户 模型 其表定义为protected table users 现在 我想做的是通过等于 users 的表名获取模型 这个函数更像是相反的Model getTable 我到处搜索但找不到解决方案
  • 使用 BizTalk Web 服务重新发布内部 Web 服务

    我正在尝试使用 BizTalk 在两个 Web 服务之间进行通信 它必须是这样的 Service1获取输入并通过 BizTalk 发送消息Service2 Service2响应该消息 将其转发至 BizTalk 并将其传递至Service1
  • 导出到 Excel 电子表格 (XLSX) 失败

    使用 ASP NET 网页 我将一些数据导出到 Excel 电子表格 XLSX 当我使用 Visual Studio 运行代码时 代码运行良好 它正在导出具有正确数据的 XLSX 文件 但在部署到测试服务器时 相同的代码会失败 它不会抛出任
  • 在 VC9 中编译时不会出现警告级别 4 的警告。为什么人们不认为这是一种编译器缺陷呢?

    我看到一些发布的代码有超出范围的错误 这让我感到好奇 我希望编译器为此代码生成警告 至少在最高级别 pragma warning push 4 int main int x 2 x 2 0 return 0 pragma warning p
  • 如何打印HttpResponse返回的消息?

    我的 Android 手机上有此代码 URI uri new URI url HttpPost post new HttpPost uri HttpClient client new DefaultHttpClient HttpRespon
  • 自定义rightBarButtonItem消失

    我在导航栏中有一个自定义 rightBarButtomItem 的奇怪错误 我有一个 TabBar 应用程序 如果应用程序已加载 按钮将显示正确 如果我单击选项卡 按钮将继续显示 如果我返回到已显示的选项卡之一 该按钮就会消失 最后 该按钮
  • 使用 python 从 HDFS 获取文件名列表

    这里是 Hadoop 菜鸟 我搜索了一些有关 hadoop 和 python 入门的教程 但没有取得太大成功 我还不需要使用映射器和缩减器进行任何工作 但这更多是一个访问问题 作为Hadoop集群的一部分 HDFS 上有一堆 dat 文件
  • 如何使用jquery打开选择输入

    所以我可以看到选择元素的选项 但我需要单击它 如果我想使用一个函数怎么办 当发生某些事情时 应该选择此选择元素 这意味着列表已打开并且我可以看到选项 我不希望用户单击选择元素 我想要其他东西来打开它 我尝试过的 select select
  • PHP readdir 和排序

    我正在做一个小画廊 我想从目录中读取文件名 并在删除一些前导数字和文件扩展名后打印下面的文件名 我有两个版本的代码 版本 1 不排序 current dir DOCUMENT ROOT weddings2 dir opendir curre
  • Android可扩展列表视图片段

    我正在寻找具有可扩展列表视图的片段 搜索后我发现了一个实现可扩展列表视图片段的类https gist github com 1316903 https gist github com 1316903 但我不知道如何使用它 请帮我 我尝试了列