- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在维护一个Android文件查看应用程序的代码,经过一个小的修改,我遇到了一个很奇怪的情况。
此应用支持在 ListView 中查看文件系统,每次用户浏览不同目录时都会重新显示此 ListView。在进入子目录前,ListView的当前位置会存入一个栈中,当用户从子目录返回后,位置信息会从栈中弹出,从而可以恢复到之前的位置。
让我向您展示它在用户从子目录导航回其父目录后执行的原始步骤,它使用 AsyncTask 来执行刷新:
在 onPreExecute() 方法中,当前文件列表 -- mFileNameList -- 将被清空,然后执行 notifyDataSetChanged() 操作。
在doInBackground()方法中,将父文件夹中的文件列表收集起来,放在一个列表中。
在onPostExecute()方法中,将收集到的列表放入mFileNameList中,调用notifyDataSetChanged()后,setSelectionFromTop()将ListView置于进入子文件夹前的前一个位置。
在我维护源代码之前,这种机制运行良好。但是我在这个过程中发现了一个小缺点:在onPreExecute()中,列表会被清空,所以ListView在显示文件列表之前是空白的。
我认为这样的代码是不必要的,所以我删除了第一步。但是经过测试,我发现setSelectionFromTop()不会再对ListView进行定位了。每次用户从子目录返回时,ListView 总是从位置 0 开始显示列表,而不是从之前的位置开始。
这是显示文件列表并恢复原始位置的代码 fragment ,但 mFileListView.setSelectionFromTop(item.pos, item.top) 不再起作用。
@Override
protected void onPostExecute(ArrayList<FileInfo> result) {
mFileNameList.clear();
mFileNameList.addAll(result);
sortCurrentList(sort);
// other code
PathSelectionItem item = mFileViewInteractionHub.getLastPathListSelectionItem();
if (item != null && item.path.equals(
mFileViewInteractionHub.getCurrentPath())) {
mFileListView.setSelectionFromTop(item.pos, item.top);
}
我记录了后端堆栈,并没有发现堆栈中的错误。实际上,我可以在调用 setSelectionFromTop() 之前设置 Adapter(),它会修复错误。但我不知道为什么 setAdapter 会成功。
有没有人能告诉我发生了什么事?谢谢。
最佳答案
setSelectionFromTop(int, int)
在未设置适配器的情况下不起作用。通过查看源代码,您可以确认这一点。该方法的开头如下所示(API 级别 19
):
public void setSelectionFromTop(int position, int y) {
if (mAdapter == null) {
return;
}
// [...]
}
如果没有设置适配器,它什么都不做就返回。
关于android - setSelectionFromTop 有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260314/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!