在ShareActionProvider意图之后,一些GridView单元格会消失并消失

时间:2015-07-21 23:12:34

标签: android gridview shareactionprovider

我有一个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活动和任何其他活动回来时有什么不同,试图找出为什么这样做。

0 个答案:

没有答案