ste*_*mcb 8 android android-intent android-actionbar shareactionprovider
根据Android文档,如果我不希望我的ShareActionProvider持久保存我应该调用的共享历史记录
mShareActionProvider.setShareHistoryFileName(null)
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我在选择共享选项时遇到以下崩溃:
11-15 10:06:34.848: E/AndroidRuntime(22461): java.lang.IllegalStateException: No preceding call to #readHistoricalData
11-15 10:06:34.848: E/AndroidRuntime(22461): at android.widget.ActivityChooserModel.persistHistoricalDataIfNeeded(ActivityChooserModel.java:573)
11-15 10:06:34.848: E/AndroidRuntime(22461): at android.widget.ActivityChooserModel.addHisoricalRecord(ActivityChooserModel.java:743)
11-15 10:06:34.848: E/AndroidRuntime(22461): at android.widget.ActivityChooserModel.chooseActivity(ActivityChooserModel.java:491)
11-15 10:06:34.848: E/AndroidRuntime(22461): at android.widget.ActivityChooserView$Callbacks.onItemClick(ActivityChooserView.java:547)
Run Code Online (Sandbox Code Playgroud)
以下是设置ShareActionProvider的代码:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.article_pager_menu, menu);
// mShareActionProvider is a field in the Activity
mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share)
.getActionProvider();
mShareActionProvider
.setShareHistoryFileName(null);
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
mShareActionProvider.setShareIntent(shareIntent);
mShareActionProvider.onCreateActionView();
return true;
}
Run Code Online (Sandbox Code Playgroud)
我有什么想法可以解决这个问题?
因此,最后我必须通过复制Android源代码中的一个来编写自己的ShareActionProvider.我还必须从源代码复制ActivityChooserView和ActivityChooserModel.隐藏活动栏中默认活动所需的实际修改是在ActivityChooserView的updateAppearance()方法中.它应该是这样的:
private void updateAppearance() {
// Expand overflow button.
if (mAdapter.getCount() > 0) {
mExpandActivityOverflowButton.setEnabled(true);
} else {
mExpandActivityOverflowButton.setEnabled(false);
}
mDefaultActivityButton.setVisibility(View.GONE);
if (mDefaultActivityButton.getVisibility() == VISIBLE) {
mActivityChooserContent.setBackgroundDrawable(mActivityChooserContentBackground);
} else {
mActivityChooserContent.setBackgroundDrawable(null);
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么setShareHistoryFileName(null)导致我最初描述的问题.谢谢你的回答七.
| 归档时间: |
|
| 查看次数: |
4280 次 |
| 最近记录: |