MvxListView 可检查列表项

2024-05-02

我想让 CustomChoiceList 与 MvvmCross 一起使用,但很难让示例正常工作,ListItem 不会被选中。

事实上,该示例使用自定义 LinearLayout 来扩展 LinearLayout 并实现 ICheckable。 当使用与 MvxAdapter 和 MvxListView 相同的布局时,永远不会调用 OnCreateDrawableState 方法,并且文本和选择图标永远不会突出显示。

我知道所选项目可以存储在 ViewModel 中。

这是原始样本:https://github.com/xamarin/monodroid-samples/tree/master/CustomChoiceList https://github.com/xamarin/monodroid-samples/tree/master/CustomChoiceList


事实上,MvxAdapter 类在幕后将列表项布局膨胀到 MvxListItemView 中,因此您实际上在列表项模板周围获得了一个额外的 FrameLayout。 MvxListItemView 不实现 ICheckable,因此不会传播是否检查项目的信息。

诀窍是实现自定义 MvxAdapter 覆盖 CreateBindableView 并返回实现 ICheckable 的 MvxListItemView 子类。 您还必须设置android:duplicateParentState="true"int 列表项模板的根 (list_item.axml)

您可以在这里找到完整的项目:https://github.com/takoyakich/mvvmcross-samples/tree/master/CustomChoiceList https://github.com/takoyakich/mvvmcross-samples/tree/master/CustomChoiceList

相关变更如下:

列表项.axml:

<?xml version="1.0" encoding="utf-8"?>
<customchoicelist.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
    android:duplicateParentState="true"
...

扩展 MvxAdapter:

class MyMvxAdapter : MvxAdapter {
        private readonly Context _context;
        private readonly IMvxAndroidBindingContext _bindingContext;

        public MyMvxAdapter(Context c) :this(c, MvxAndroidBindingContextHelpers.Current())
        {
        }
        public MyMvxAdapter(Context context, IMvxAndroidBindingContext bindingContext) :base(context, bindingContext)
        {
            _context = context;
            _bindingContext = bindingContext;
        }
        protected override MvxListItemView CreateBindableView(object dataContext, int templateId)
        {
            return new MyMvxListItemView(_context, _bindingContext.LayoutInflater, dataContext, templateId);
        }
    }

扩展 MvxListItemView :

class MyMvxListItemView : MvxListItemView, ICheckable
{

    static readonly int[] CHECKED_STATE_SET = {Android.Resource.Attribute.StateChecked};
    private bool mChecked = false;

    public MyMvxListItemView(Context context,
                           IMvxLayoutInflater layoutInflater,
                           object dataContext,
                           int templateId)
        : base(context, layoutInflater, dataContext, templateId)
    {         
    }

    public bool Checked {
        get {
            return mChecked;
        } set {
            if (value != mChecked) {
                mChecked = value;
                RefreshDrawableState ();
            }
        }
    }

    public void Toggle ()
    {
        Checked = !mChecked;
    }

    protected override int[] OnCreateDrawableState (int extraSpace)
    {
        int[] drawableState = base.OnCreateDrawableState (extraSpace + 1);

        if (Checked)
            MergeDrawableStates (drawableState, CHECKED_STATE_SET);

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

MvxListView 可检查列表项 的相关文章

  • 使用 MonoDroid 试用版调试应用程序

    我已经安装了 MonoDroid 试用版 我创建了一个 Hello World 应用程序并在模拟器中对其进行调试 但任何应用程序都会出现在 Android 设备模拟器上的应用程序列表中 问题是试用版还是我的应用程序中出现了一些错误 你能帮我
  • Mvvm跨本地化:运行时切换

    有没有办法在运行时将当前语言更改为另一种语言 例如 能够在单击按钮时或启动应用程序时进行切换 获取用户语言并进行切换 如何告诉插件在启动时检查用户语言 在此先感谢您的帮助 有没有办法在运行时将当前语言更改为另一种语言 是的 打电话build
  • MvvmCross 中的异步初始化和属性已更改

    我在视图模型中有一些来自 Init 的异步调用 问题是有时异步调用会在 OnCreate 之前返回 并且 UI 中的属性不会更新 当我们必须初始化异步数据时 是否有适合这种情况的适当的异步 等待模型 伪代码 ViewModel public
  • 在不同的活动上显示 OnItemClickListener 的结果

    我使用 OnItemClickListener 从列表视图中选择一个项目 如下所示 listView setTextFilterEnabled true final TextView disp TextView findViewById R
  • 使用 SkiaSharp 在 Xamarin 中加载 SVG 文件

    从版本 1 55 0 开始 SkiaSharp 支持读取 SVG 文件 该软件包已于几天前发布 2016 年 11 月 10 日 但我找不到足够的有关如何使用它的文档 需要以下包 SkiaSharp 1 55 0 SkiaSharp 视图和
  • 当选择模式为 MultiChoice Modal 时,如何防止激活某些 ListView 项目?

    我有一个由自定义 BaseAdapter 填充的自定义 GridView GridView的选择模式是MultiChoiceModal 我想控制长单击时可以激活哪些项目 同时仍然确保它们响应 短 单击事件 BaseAdapter有一个方法叫
  • 冲突的 Android 错误消息:指定的子项已经有父项。您必须首先对孩子的父母调用removeView()

    最初我得到了这个错误 指定的子项已经有父项 您必须调用removeView 首先是孩子的父母 at customSection addView customLayout 所以我添加了 LinearLayout customLayout ge
  • 无法在调试 Xamarin Android 和 iOS 的设备上部署

    我使用的是最新的 Visual Studio 15 6 3 无法再通过调试在设备上部署 如果我在没有调试的情况下运行它就会部署 我该如何修复它 真烦人 iOS Android System Net Mqtt Sdk MqttClientIm
  • PopupWindow onitemclick 中的 Android Listview 在某些设备上不起作用

    我的 ListView 在 PopupWindow 内 当我显示 PopupWindow 并单击设备 ASUS K00z 中的 Listview 行时 fonepad 工作得很好 但在 HTC Z715e 中不起作用 项目单击事件未触发 1
  • 如何在Android中添加水平滚动视图和列表视图

    我正在尝试创建一个应用程序 因为我需要创建一个列表视图 但最重要的是我想要一个用于多个数据的水平列表视图 我很困惑我们该如何做到这一点 请帮助我 主要活动 XML
  • MvvmCross:如何将 Android 上下文传递给 MvxCommand?

    我创建了一个服务接口 public interface IMessageDialogService void ShowDialog object context string title string message string butt
  • 在 Mono 上使用 Mono for android

    将 MonoDevelop 的编译器切换为 Mono 工具而不是 NET 看起来非常容易 您只需在 IDE 的设置下选择不同的框架即可 然而 在切换到 Mono 并使用 Mono 工具编译项目后 Mono for android 似乎不再是
  • 滑动 ViewPager 时禁用 ListView 滚动

    有没有办法在滚动 ViewPager 项目时锁定 ListView 的垂直滚动 或者也许改变 ViewPager 的水平滚动灵敏度 Thanks 最后编辑 这是我更新的解决方案 感谢您的回复 Masoud Dadashi 您的评论终于让我找
  • 如何在 Android 的 web 视图中显示内置缩放控件

    可能与此重复 始终在 WebView 中显示缩放控件1 https stackoverflow com questions 6866710 always show zoom controls in webview但我只想显示不一定总是需要的
  • 如何在 xamarin.android 中创建新的密钥库?

    我正在尝试发布 xamarin android 应用程序 我正在使用 Visual Studio 和 Xamarin Android 6 所以我遵循this https developer xamarin com guides androi
  • 将适配器设置为 ExpendableListView 类型不匹配

    当我尝试将适配器设置为 ExpendableListView 时 它需要 ListAdapter 但我想使用扩展 BaseExpandableListAdapter 的自定义 ExpandableListAdapter 这是我的 Expan
  • Getview在android中被多次调用

    我正在研究单元的重用 目前我正在适配器的 getview 方法中工作 我遇到一个问题 我的 getview 方法调用了 9 次 但它应该在应用程序启动时只调用 5 次 因为我只显示 5 行 public View getView int p
  • 显示 SD 卡中的所有歌曲

    我正在做音乐播放器应用程序 并想展示所有歌曲的类型 如果可能的话请给我一些提示 我能够显示所有关于艺术家和专辑的歌曲 但在选择流派歌曲时面临问题 我的输出显示每个流派类别中的所有歌曲 它并没有破坏歌曲的流派 我的代码如下 LocalGenr
  • 列表视图标题和第一项之间的空白

    我创建了一个带有 ListView 的 Android 应用程序 我已将页眉和页脚添加到列表中 但是 当添加分隔符 分隔符时 它还会在标题和第一个 ListView 项之间创建一个空白空间 它对最后一个 ListView 项目和页脚执行相同
  • 如何使用 xamarin 表单提示用户进行地理定位

    我正在 Xamarin Forms 应用程序中开发一个应用程序 需要请求地理位置权限 如果获得许可 它需要从设备获取地理位置数据 然后将地理位置坐标放入 Forecast io URL 我正在使用 James 的 Geolocator 插件

随机推荐

  • 使用 cmake 和 opencv 对符号“gzclose”的未定义引用[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我尝试构建该项目 doppia https bitbucket org rodrigob doppia 但发生链接错误 我想这是一
  • java.lang.NullPointerException(无错误消息)APK构建

    Top level build file where you can add configuration options common to all sub projects modules buildscript repositories
  • 如何在 Mulesoft 中将睡眠设置为流程而不丢失消息负载

    我想插入脚本来延迟 Mulesoft 中的处理流程 我尝试在 groovy 中插入脚本 但丢失了消息有效负载 因此当我必须获取消息有效负载时 收到了空指针 我怎样才能不丢失消息有效负载 Thanks 如果您正在使用Groovy流程中的组件
  • 帮助我在 Python 中实现反向传播

    EDIT2 新的训练集 Inputs 0 0 0 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 1 0 0 0 1 0 1 0 1 0 2 0 1 0 3 0 1 0 4 0 2 0 0 0 2 0 1 0 2 0 2
  • 如何以编程方式移动 OpenLayers Vector?

    API 文档为OpenLayers Feature Vector http dev openlayers org apidocs files OpenLayers Feature Vector js html说 Vector 本身根本没有方
  • C# 数据库包装设计

    我正在为 C 设计一个数据库包装器 以下是我有两个选择 选项A class DBWrapper IDisposable private SqlConnection sqlConn public DBWrapper sqlConn new S
  • 将自定义字段添加到 Django 中的 auth_user 表

    目前我创建了另一个类 表名为MyAppUser我的自定义列 例如地址和电话号码 具有 Django 身份验证的外键User 像这样的东西 from django db import models from django contrib au
  • 使用 SvelteKit 托管 Firebase

    我已经创建了一个 svelte 应用程序并使用 SvelteKit 构建应用程序 一切正常 我尝试在 firebase 托管中部署此应用程序 但失败了 Sveltekit 生成生产版本 svelte kit文件夹 我试图改变public对象
  • Android Google Maps API OnLocationChanged 仅调用一次

    每当我的位置发生变化时 我都会尝试更新我的相机 然而 onLocationChanged 只被调用一次 当我随后在模拟器中发送新位置时 不会调用 onLocationChanged 我已经尝试了几个小时了 但似乎无法修复它 public c
  • 提高UDP可靠性

    我正在构建一个基于 UDP 的小型服务器 服务器基于 Net并使用它自己的Socket类 我通过 ReceiveMessageFromAsync 和异步发送使用完成端口 我的问题是我失去了大约 5 10 的流量 现在我明白这是正常的 但是有
  • 自己应用程序锁屏中的 iPod 控制

    如何为我自己的应用程序使用锁屏 iPod 控件 我尝试了MPNowPlayingInfoCenter 但是如果我设置了信息 它就不会显示在任何地方 不在锁定屏幕上 也不在 AppleTV 上播放 我使用 AVPlayer 来播放我的音频文件
  • Sonarqube C# 扫描仪异常:“java.lang.IllegalArgumentException:不是指针的有效行偏移量”

    有谁知道这是怎么回事 在Windows服务器上使用Sonarqube v5 6 c 扫描仪v5 5 0 479 似乎是在多个文件中发现这一点 而不总是相同的文件 这是最令人担忧的 有人有主意吗 16 46 03 INFO Importing
  • 使用 MOVE 确定 DB RESTORE 的 SQL 数据路径

    我正在尝试编写一个自动恢复数据库备份的脚本 我知道我可以使用以下 RESTORE 命令 RESTORE DATABASE DBRestoredName FROM DISK N C path to backup bak WITH FILE 1
  • Python 中的“lambda”是什么意思,最简单的使用方法是什么?

    您能否给出一个示例和其他示例来说明何时以及何时不使用 Lambda 我的书给了我一些例子 但它们很令人困惑 拉姆达 起源于拉姆达演算 http en wikipedia org wiki Lambda calculus和 AFAIK 首先实
  • 使用实体框架而不使用 using 语句的缺点?

    有很多这样的代码块 public class SomeController Controller DbEntities entity new DbEntities public ActionResult Add entity someOpe
  • 使用accumulate计算数组double[]平均值的函数

    它一定是最常见的函数 每个人在某处都有代码片段 但我实际上花了不少于 1 5 小时在 SO 以及其他 C 网站上搜索它 但还没有找到解决方案 我想计算 a 的平均值double array 使用函数 我想将数组作为函数传递给参考 有数百万个
  • 使用node和multer将图像上传到heroku不起作用

    我正在尝试使用 Node 后端将图像文件上传到 Heroku 我可以使其工作 同样的过程在本地主机测试中工作得很好 但是在将我的项目部署到 Heroku 并测试它之后 过程和文件中出现错误不会上传 后端 let storage multer
  • python字符串包含双引号字符

    我的输入字符串由字符组成 包括双引号和单引号 和 B SS JU PQ AD DDSFD ABD E J 但是 当我从文本文件打开上述输入并打印它时 第三行中的双引号 被打印为 xe2 x80 x9d 我的目标是进行简单的字符计数 B 2
  • 如何避免在 Excel 中垂直合并单元格?

    我厌倦了合并单元格 它们就是行不通 因此 当我只需要文本在多列中居中时 我找到了一种避免水平合并单元格的方法 那是 Range A1 C1 HorizontalAlignment xlCenterAcrossSelection 它就像一个魅
  • MvxListView 可检查列表项

    我想让 CustomChoiceList 与 MvvmCross 一起使用 但很难让示例正常工作 ListItem 不会被选中 事实上 该示例使用自定义 LinearLayout 来扩展 LinearLayout 并实现 ICheckabl