gpt4 book ai didi

android - 更好地理解 SimpleAdapter 的 ViewBinder

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:05 27 4
gpt4 key购买 nike

我有 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com