我收到以下崩溃报告:
致命异常:java.lang.IllegalStateException:在 android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1832) 在 android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager. java:1850) 在 android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:643) 在 android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:603) 在 android.support.v4.app .DialogFragment.show(DialogFragment.java:143)
以下代码导致了崩溃,为了清楚起见,我删除了一些琐碎的设置代码。我已经阅读了这个错误,据我了解,.show()
在用户交互中应该是安全的,例如onClick()
. 我唯一能想到的是,这query()
需要很长时间并且用户换掉了。这是对这个错误的合理解释吗?即使使用大型数据库,它在我的设备上也是即时的。还有其他可能吗?谢谢!
foldersButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
final List<String> paths = new ArrayList<>();
try(Cursor c = getActivity().getContentResolver().query(Meta.CONTENT_URI,
new String[]{"DISTINCT " + Meta.PARENT}, null, null,
Meta.PARENT + " ASC"))
{
while (c != null && c.moveToNext())
{
String path = c.getString(c.getColumnIndex(Meta.PARENT));
// We place the excluded folders at the end
if (!mExcludedFolders.contains(path))
paths.add(path);
}
}
[setup...]
int[] position = new int[2];
foldersButton.getLocationOnScreen(position);
FolderDialog dialog = FolderDialog.newInstance(
paths.toArray(new String[paths.size()]),
visible,
excluded,
position[0],
position[1]);
dialog.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.FolderDialog);
[setup...]
dialog.show(getFragmentManager(), TAG);
}
});