我在android中自定义创建的CursorAdapter派生类遇到了一个奇怪的问题:
我的getView()实现是许多站点/Google对话中看到的直接教科书。然而,似乎对于不同的位置(调用此方法时使用的位置参数),此方法被传递给convertView的同一实例,即使在我看来,这些实例应该引用不同的对象实例,因为它应该对应于ListView中的其他可见项,并且在可见列表项的情况下不应该重用同一对象实例。。。
我已经删除了更新实际视图的实际部分,因为即使没有它,问题也会重现。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
Log.d("dd", "getView()");
if (convertView == null) {
Log.d("d", "convertview is null!");
// create convertView from xml
convertView = this.mInflater.inflate(R.layout.catalog_entry,
parent, false);
// create the viewHolder
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView
.findViewById(R.id.gameName2);
viewHolder.image = (ImageView) convertView
.findViewById(R.id.gameImage);
convertView.setTag(viewHolder);
} else {
Log.d("dd", "convertview is not null");
viewHolder = (ViewHolder) convertView.getTag();
}
LinearLayout thisItem = (LinearLayout) convertView;
Log.d("thisItem",
"This Item is Index "
+ position
+ " "
+ thisItem.toString()
+ " "
+ Integer.toHexString(System.identityHashCode(thisItem))
+ "x: " + thisItem.getX() + " y: " + thisItem.getY());
this.cur.moveToPosition((int) (getItemId(position) - 1));
Log.d("dd", "End of getView()");
return convertView;
}
运行此代码会产生以下输出:
D/dd(27725):getView()D/D(277250):convertview为空!D/thisItem(27725):此项为索引0android.widget.LinearLayout@40fb5f7040fb5f70x:0.0 y:0.0 D/dd
(27725):getView()结束D/dd(27735):getView()D/ddandroid.widget.LinearLayout@40fb5f7040fb5f70x:0.0 y:0.0 D/dd
(27725):getView()结束D/dd(27735):getView()D/ddandroid.widget.LinearLayout@40fb5f7040fb5f70x:0.0 y:0.0 D/dd
(27725):getView()结束D/dd(27735):getView()D/ddandroid.widget.LinearLayout@40fb5f7040fb5f70x:0.0 y:0.0 D/dd
(27725):getView()的结尾D/dd(277250):getView()D/ddandroid.widget.LinearLayout@40fb5f7040fb5f70x:0.0 y:0.0 D/dd
(27725):getView()结束D/dd(27735):getView()D/ddandroid.widget.LinearLayout@40fb5f7040fb5f70x:0.0 y:0.0 D/dd
(27725):getView()D/dd结束(27725:getView(!D/thisItem(27725):此项为索引1android.widget.LinearLayout@40fb89f840fb89f8x:0.0 y:0.0 D/dd
(27725):getView()D/dd结束(27725:getView(!D/thisItem(27725):此项为索引2android.widget.LinearLayout@40fb9c4840fb9c48x:0.0 y:0.0 D/dd
(27725):getView()D/dd结束(27725:getView(!D/thisItem(27725):此项为索引3android.widget.LinearLayout@40fbae9840fbae98x:0.0 y:0.0 D/dd
(27725):getView()结束D/dd(27735):getView()D/D
(277205):convertview为空!D/thisItem(27725):此项为索引4android.widget.LinearLayout@40fbc0e840fbc0e8x:0.0 y:0.0 D/dd
(27725):getView()结束
从开始可以看出,对于每个位置(0到4),发送的是相同的视图对象散列...
< code>Convertview重用视图是正确的。您可以删除所有的< code>Convertview部分,确保它不会重用不需要的视图,并且您将获得想要的结果(以一些性能为代价)...).
简而言之,将ListView的高度设置为< code>match_parent或其他固定高度。
列表视图以您看到的“试运行”方式调用 getView()
的原因有很多,最常见的原因是因为您使用了wrap_content
作为 ListView 的高度。Android必须夸大一堆行来计算wrap_content
的高度,但它不能使用真实数据,因为这还不可用。因此,适配器抛出了这些最佳猜测。稍后,将使用实际数据(重新)创建布局,这就是为什么您看到每行创建两次的原因。
CursorAdapter也应该维护适当的行本身,您不需要这一行:
this.cur.moveToPosition((int)(getItemId(position) - 1));
我有一个布局,即MotionLayout,它必须为我定义了motionscene约束集开始和结束的FrameLayouts。并且它们是正确的动画。 然后,在这个动画框架布局下,我添加了两个文本视图,在单击时,我尝试隐藏一个,显示另一个,但两个都保持可见 重写有趣的onViewCreated(View:View,SavedInstanceState:Bundle?){super.onviewcrea
我正在为我们的CMS应用程序中的一个网站创建一个表单,该应用程序使用了谷歌新的隐形reCaptcha。 然而,我被困在如何使用reCaptcha的回调上? 在使用验证码之前,代码非常简单: HTML jQuery 库具有验证特定表单并将数据发送到处理表单数据的脚本的函数。 现在,我想将reCaptcha添加到表单中。文件说明如下: 1创建一个div与data-size='不可见'。 2打电话给gr
1号 1号 1号 10号 10号 5号 5号 5号
JavaFX2教程有一个地址簿示例,它是一个表视图。 辅导的:http://docs.oracle.com/javafx/2/fxml_get_started/fxml_tutorial_intermediate.htm#CACFEHBI 编辑单元格的增强功能:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm 修改以添加复选框:h
我遇到了以下两个依赖项的问题: org.apache.felix"org.apache.felix.utils" 和 通用域名格式。github。rotty3000»phidias»0.3.2 它们都对组织有可传递的依赖关系。奥斯基。核心,felix依赖于版本4.1.0,phidias依赖于版本5.0.0 我们需要5.0.0版本才能正确编译代码 如果我把我的依赖项作为: Maven自动获取版本4.