Android:没有历史记录的ShareActionProvider

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)

我有什么想法可以解决这个问题?

ste*_*mcb 8

因此,最后我必须通过复制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)导致我最初描述的问题.谢谢你的回答七.