Android touchlistview自定义页脚阻止列表大小更新
我的问题可能与此有关: 在Commonware的touchlistview演示项目中 添加了一个简单的文本视图作为页脚,可以正常工作。当我添加我自己的项目时,它会在删除项目时发生故障。对于最初的4项,在删除4项中的任何一项后,页脚将保持在位置5 以下是我添加页脚的方式:Android touchlistview自定义页脚阻止列表大小更新,android,drag-and-drop,commonsware-cwac,Android,Drag And Drop,Commonsware Cwac,我的问题可能与此有关: 在Commonware的touchlistview演示项目中 添加了一个简单的文本视图作为页脚,可以正常工作。当我添加我自己的项目时,它会在删除项目时发生故障。对于最初的4项,在删除4项中的任何一项后,页脚将保持在位置5 以下是我添加页脚的方式: View footerView = ((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_clo
View footerView = ((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_cloud, null, false);
这是xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="64dip"
android:gravity="center_vertical"
>
<ImageView android:id="@+id/add_icon"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_menu_add"
/>
<ImageView android:id="@+id/cloudBG"
android:layout_centerInParent="true"
android:layout_width="230dp"
android:layout_height="60dp"
android:background="@drawable/cl"
/>
</RelativeLayout>
显示适配器和阵列大小已更新
我更改了touchlistview.java中的一些代码,以修复在将项目拖到最低项目下方时出现的崩溃:
Log.d(“tlv”,“从“+mFirstDragPos+”拖动到“+mDragPos+”cnt“+getCount())
if(mDragPos
getCount函数始终返回相同的数字(页脚的项目数量+1),即使在删除项目之后也是如此
谁知道我的自定义页脚有什么不同呢?虽然我无法重现您的问题,但还有其他问题。:-) 即使在基线代码中,如果从应用了页脚的
TouchListView
中删除一行,也会得到奇怪的视觉结果。从层次结构视图的角度来看,似乎发生的是,对于每个删除的行,页脚都是重复的——删除四行,得到四个页脚
我不知道为什么会这样TouchListView
忽略了提供其内容的ListAdapter
。也许这才是真正的问题
就目前而言,我将不得不正式不支持有一个页脚,同时支持删除模式。两者都可以单独工作,但不能组合使用。如果您尝试,我将扩充TouchListView
以给出运行时异常
最后,TouchListView
确实需要更换。我可能会在2012年取代它,作为我对触摸事件更深入探索的一部分。也许其他人会想出他们的办法。由于大部分代码都是从AOSP的音乐应用程序中提取的,所以我的修复能力有限
很抱歉,目前不支持此功能。您能否发布一个指向演示问题的完整示例应用程序的链接?您可能在
TouchListView
中遇到了一些限制,我可以纠正这些限制。感谢您的快速回复!你的项目很奇怪。这就好像您将代码放在TouchListView
库项目中一样,这肯定不是设置某些内容的预期方式。我无法在Eclipse中或通过命令行构建它。我会尽我最大的努力在这个问题上做一些实验。对不起,再次编辑限制:我觉得这仍然可以通过强制一些更新机制来解决。尝试此操作(您或我的页脚,无所谓):-启动应用程序-通过滑动删除所有行-->页脚位于其初始位置-通过按“上一步”按钮暂停应用程序,返回主屏幕-通过从应用程序列表中选择它来恢复应用程序-->页脚位于其预期位置~因此,在暂停恢复中的某个位置,对象的一部分将被丢弃并重新计算。。。尼诺·范霍夫:“我觉得这仍然可以通过强制一些更新机制来解决。”——可能。欢迎您尝试并提供补丁。再说一次,总有一天我可以解决这个问题,但事实上,我在一个很大程度上依赖于外来代码的基础上工作,这真的妨碍了我了解到底发生了什么。我从AOSP中截取的代码中写满了“大规模黑客”,这就是为什么我只专注于提供一个稳定的组件,而不一定包含所有可能的功能。再次表示歉意,我会做出一些让步。谢谢你抽出时间。
Log.d("tlv","count b4 remove "+adapter.getCount()+" aray: "+array.size());
adapter.remove(adapter.getItem(which));
//adapter.notifyDataSetChanged();
Log.d("tlv","count after remove "+adapter.getCount()+" aray: "+array.size());
if(mDragPos < getCount()-this.getFooterViewsCount()){// Nino van Hooff: fix out of bounds
mDropListener.drop(mFirstDragPos, mDragPos);
}else{
mDropListener.drop(mFirstDragPos, mDragPos-1);
}
}
unExpandViews(false);