jjzjj

android - 更好地理解 SimpleAdapter 的 ViewBinder

coder 2023-12-13 原文

我有 4 个 TextViews、2 个 ImageViews、2 个 Buttons 和 2 个小部件,它们是 ListView 中行定义的一部分。数据来自 XML 和一个 SimpleAdapter。为了访问这些 TextViews,我在自定义类中实现了 ViewBinder 并覆盖了 setViewValue。这有效,我想动态更改的两个 TextViewssetViewValue 中处理。让我感到困惑的是为什么我的其他两个 TextView 没有通过 setViewValue 传递。我说这是基于设置一个执行线程只进入两次的断点。我期待看到它 4 次或更多次?

这是我设置断点的 setViewValue

@Override     
public boolean setViewValue(View view, Object data, String text)
{
    if(view.getId() == R.id.txtvw1)
    {             
//blah do some stuff
    }
    else if (view.getId() == R.id.txtvw2)
    {
//Blah do some stuff
    }

    return true;
} 

TextViews 的 xml 声明(1 个显示,4 个不显示):

<TextView
        android:id="@+id/txtvw1"
        android:layout_centerHorizontal="true"
        android:layout_width="185dp"
        android:layout_height="25dp"
        android:textSize="20sp"
        android:layout_marginTop="60dp"
        android:gravity="center"
        android:inputType="none"
        android:text="@string/str_StaticA"
        android:textColor="#C0F700" />

    <TextView
        android:id="@+id/txtvw4"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="35dp"
        android:layout_width="95dp"
        android:layout_height="50dp"
        android:textSize="18dp"
        android:layout_marginTop="110dp"
        android:gravity="center"
        android:inputType="none"
        android:text="IMHO:"
        android:textColor="#FFBA19" />

总而言之,为什么执行只进入覆盖两次,而恰好是我想要更新的那两次?

通过额外的阅读和演绎推理,我们发现了更多的信息。在我看来,ListView 行中的 View XML 会通过 ViewBinder,但这是错误的!据我所知,您可以通过 setViewBinderViewBinder 附加到 DataAdapter。好吧,因为 DataAdapter 被告知要使用什么 View 来填充其中的数据,所以只显示这两个 View 是有道理的。我只向它透露了两个。

这是一个 fragment ,其中我指定了填充过程中涉及的 View 并将它们传递给 DataAdapter 的构造函数:

String[] from = new String[] {"txtvw_PrevLift", "txtvw_PrevReps", "ActuLiftPikr", "ActulRepsPikr" };
int[] to = {R.id.txtvw_PrevLift, R.id.txtvw_PrevReps, R.id.ActuLiftPikr, R.id.ActulRepsPikr };

LiftDataAdapter LiftDataAdapter = new LiftDataAdapter(this, LiftDataMaps, R.layout.liftdatalayout, from, to);

虽然这似乎有道理,但我不知道我的演绎推理是否准确。当我找到更多信息时会更新。

最佳答案

如果您在 SimpleAdapter 上设置一个 ViewBinder 所有 您声明的 Views(在 array in your case)无论如何都会被传递给 ViewBindersetViewValue() 方法。如果 setViewValue 方法没有返回 true,这意味着该 View 的数据绑定(bind)失败(无论出于何种原因),那么您将获得默认操作(对于 TextView),从数据 Hashmap 中设置文本。现在你声明 setViewValue 只为两个 TextViews 做一些事情(通过他们的 id 检查)并且返回 true 无论什么。当您为行布局中的其他 Views 输入 setViewValue 时,您将再次输入 setViewValue,不匹配 ID (所以那些 Views 没有更新)并返回 true(这将告诉适配器绑定(bind)成功并且这个 View 不需要任何更多的工作)。 A look at the source code SimpleAdapter.bindView 方法将向您展示如何使用 ViewBinder

此外,我看到您使用了自定义适配器,您确定不会干扰正常的 SimpleAdapter 逻辑吗?(也不要对类名和变量名使用相同的名称)

关于android - 更好地理解 SimpleAdapter 的 ViewBinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10655867/

有关android - 更好地理解 SimpleAdapter 的 ViewBinder的更多相关文章

  1. ruby-on-rails - 更好的替代方法 try( :output). try( :data). try( :name)? - 2

    “输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  2. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  3. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  4. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  5. ruby-on-rails - Rails Asset Pipeline 更好的错误或堆栈跟踪 - 2

    刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom

  6. ruby-on-rails - 对于 Ruby 应用程序,是否有比 Sanitize 更好的替代方案? - 2

    我爱Sanitize.这是一个了不起的实用程序。我遇到的唯一问题是,它需要永远准备一个开发环境,因为它使用Nokogiri,这对编译时间来说是一种痛苦。是否有任何程序可以在不使用Nokogiri的情况下执行Sanitize的操作(如果没有别的,只是温和地执行它的操作)?这将以指数方式提供帮助! 最佳答案 Rails有自己的SanitizeHelper。根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,它将Thissanitizehe

  7. Ruby:从模块中将多个方法作为 proc 返回的更好方法 - 2

    从模块中返回一个类似proc的方法非常容易:moduleFoodefself.bar#Methodimplementationenddefself.baz#Methodimplementationenddefself.qux#Methodimplemenatationenddefself.zoo#MethodimplementationendendFoo.method(:bar)#Returnsaprocobject但是如果我想从同一个模块返回多个(但不是全部)方法怎么办?一种方法是:[:bar,:baz].inject([]){|memo,i|memo有没有更好、更敏捷的方法来做同样

  8. ruby-on-rails - 在测试环境中禁用地理编码 - 2

    在我的RubyonRails应用程序中,我使用的是Geocoder。它工作正常,但我的测试速度慢了十倍!我找到了一些解决方案,但我认为它们不是很清楚?有什么方法可以在测试环境中禁用Geocoder? 最佳答案 根据gemdocumentationonGithub,您可以在测试中使用测试查找,以避免执行实际请求:Geocoder.configure(:lookup=>:test)Geocoder::Lookup::Test.add_stub("NewYork,NY",[{'latitude'=>40.7143528,'longitud

  9. ruby-on-rails - 更好的写法 @instances.count > 0 - 2

    我有这个代码:0%>#@statesisanactiverecordcollection我只是觉得应该有更好的方式来写这个。我正在寻找类似的东西:我意识到这是一个微小的变化,但它会是一个受欢迎的清理。 最佳答案 您可能需要ActiveRecord的any?http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-any-3FDostuffhereif@stateshasatleastoneresult 关

  10. ruby-on-rails - 在调用方法之前检查 nil 对象的更好方法是什么? - 2

    我有这个方法调用,我必须使用...financial_document.assets.length但是financial_document.assets可能是nil。我可以用...financial_document.assets.nil??'0':financial_document.assets.length有没有重复性较低的方法? 最佳答案 DaveW.Smith的方向是正确的。检查一下:http://www.nach-vorne.de/2007/4/24/attr_accessor-on-steroids一个简单的解决方案如

随机推荐