我有一个GridView,其中每个单元格都是缩略图,文件名和复选框。要填充网格,我使用CustomCursorAdapter: CustomCursorAdapter扩展了CursorAdapter。
我有一个启动系统摄像头的浮动按钮。如果我拍照,网格会正确更新新单元格。
在操作栏中,我有一个删除按钮。如果我选中一个或多个复选框并按下删除按钮,则单元格被正确删除。
但是我还有一个ShareActionProvider按钮,这样你就可以检查多个单元格并共享它们。这很有效。但是,这就是问题所在。想象一下,我们有3或4个细胞。你检查了几个,分享它们,当你从共享对话框回来时,你会看到所有的单元格,你可以看到它们的衰落和消失,但是一个,最左上角的一个。
我检查并看到共享对话框之后是执行的onResume方法。我唯一有兴趣在该方法中完成的是重置复选框(变量的selected.clear()和每个Checkbox视图的cb.setChecked(false))。此外,我将ShareActionProvider按钮的意图设置为空选(这将触发Toast:"首先选择要共享的图像"如果现在按下该按钮)。
@Override
public void onResume() {
if (shared) { //we come from a share
uncheck(); //unchecks the Checkboxes views
selected.clear(); //reset the selected items list
//getShareIntent returns an intent with the items in
//selected (now empty) as extras
Intent intent = this.getShareIntent();
if (intent != null && mShareActionProvider != null) {
mShareActionProvider.setShareIntent(Intent.createChooser(intent,
getResources().getText(R.string.send_to)));
}
shared = false;
}
super.onResume();
}
删除取消选中,重置和新意图设置不会影响该行为,无论如何单元格都会消失。事实上,如果我评论整个onResume函数,问题仍然存在。
我尝试过类似的事情:
grid.invalidateViews();
mAdapter.notifyDataSetChanged();
grid.setAdapter(mAdapter);
还尝试将super作为第一行,但是复选框,intent和list变量都没有更新。
另一个线索是,如果我按下左侧可见的唯一单元格的缩略图(这会加载一个新的活动以查看图片大尺寸),那么当新活动加载时,消失的单元格会出现一秒钟。 O_O
我尝试按下共享后缩略图应出现的位置,以检查是否启动了大显示活动,但这并没有发生。
我在滚动GridViews时读到类似的东西,但我只有三个元素,不需要滚动。这可能会发生什么?
编辑:要检查问题是否与内存和缩略图有关,我在项目视图中对它们进行了评论,只显示了文本视图和复选框。但问题仍然存在。绝对绝望 - 我几天都试图解决这个问题 - 我试图重新启动onResume中的网格活动,试图强制重绘(而mAdapter.notifyDataSetChanged()在添加新单元时起作用,之后从未工作过共享):
@Override
public void onResume() {
super.onResume();
if (shared) {
shared = false;
Intent intClearStack = new Intent(
getBaseContext(),
GridActivity.class);
intClearStack
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intClearStack);
finish();
}t
}
我并不为这个解决方案感到骄傲,但是我发现最接近解决这个问题的方法。最近的原因是,虽然它几乎一直在起作用,但它并不是偶然的。我想知道为什么从ShareActionProvider活动和任何其他活动回来时有什么不同,试图找出为什么这样做。