我有4个TextViews
,2个ImageViews
,2个Buttons
和2个小部件,它们是ListView
中的行定义的一部分。数据来自XML和SimpleAdapter
。为了访问这些TextViews
,我在自定义类中实现了ViewBinde
r并覆盖了setViewValue
。这有效,并且我要动态更改的两个TextViews
在setViewValue
中处理。让我感到困惑的是为什么我的其他两个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
行中的XML会通过ViewBinder
,但这是错误的!据我所知,您是通过ViewBinder
将setViewBinder
附加到DataAdapter的。好吧,因为DataAdapter被告知要使用什么 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);
虽然这似乎是有道理的,但我不知道我的演绎推理是正确的。当我找到更多信息时将进行更新。
最佳答案
如果在ViewBinder
上设置SimpleAdapter
所有,则无论如何,您声明的Views
(在您的情况下为to
数组中)都将传递到ViewBinder
的setViewValue()
方法。如果setViewValue
方法未返回true
,则意味着该View
的数据绑定(bind)失败(无论出于何种原因),那么您将获得默认操作(针对TextView
),并从数据Hashmap
中设置文本。现在,您声明setViewValue
仅对两个TextViews
(通过其ID进行检查)执行某项操作,并且不管是什么,也返回true
。当您在行布局中输入其他setViewValue
的Views
时,您将再次输入setViewValue
,不匹配id(因此这些Views
不会更新),然后返回true
(这将告诉适配器绑定(bind)是成功,并且此View
不再需要任何工作)。 SimpleAdapter.bindView
方法的A look at the source code将向您展示ViewBinder
的用法。
另外,我看到您使用的是自定义适配器,确定不会干扰普通的SimpleAdapter
逻辑吗?(也不要对类和变量名使用相同的名称)
关于android - 更好地了解SimpleAdapter的ViewBinder,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10655867/