GPG*_*GVM 5 android simpleadapter android-viewbinder
我有4个TextViews,2个ImageViews,2个Buttons和2个小部件,它们是a中行定义的一部分ListView.数据来自XML和a 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;
}
Run Code Online (Sandbox Code Playgroud)
xml声明TextViews(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" />
Run Code Online (Sandbox Code Playgroud)
所以总结为什么执行只进入覆盖两次而它恰好是我想要更新的两个?
通过额外的阅读和演绎推理,可以看到更多的信息.在我的脑海里,ListView在行中查看XML会通过ViewBinder但是错了!从我可以想象你通过附加ViewBinder到DataAdapter setViewBinder.好吧,因为DataAdapter被告知使用哪些视图来填充其中的数据,所以只有两个显示才有意义.我只露出了两个.
这是一个片段,我在其中指定填充过程中涉及的Views并将它们传递给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);
Run Code Online (Sandbox Code Playgroud)
虽然这似乎有道理但我不知道我的演绎推理是准确的.将在我找到更多信息时更新.
如果你设置了一个ViewBinderon ,你声明的SimpleAdapter 所有Views(在to你的情况下在数组中)将被传递给你ViewBinder的setViewValue()方法,无论如何.如果setViewValue方法没有返回true意味着数据绑定View失败(无论出于何种原因),那么您将获得默认操作(对于a TextView),从数据中设置文本Hashmap.现在你宣布setViewValue只为两个人做一些事情TextViews(通过他们的ids检查),并且true 无论如何都要返回.当您在行布局中输入setViewValue另一个时Views,您将再次输入setViewValue,不匹配ID(因此没有更新Views)并返回true(这将告诉适配器绑定是否成功,这View不会'需要更多的工作).查看该SimpleAdapter.bindView方法的源代码将向您展示如何ViewBinder使用它.
另外,我看到你使用自定义适配器,你确定你不会干扰正常的SimpleAdapter逻辑吗?(也不要使用同名的类和变量名)
| 归档时间: |
|
| 查看次数: |
3877 次 |
| 最近记录: |