我的问题类似于fragment 中的 Android setShareIntent,但我在那里阅读了答案,但不知道如何将它们应用于我的情况。
我的问题的快速总结
我想在每次片段更改时设置ShareIntent,即每当向用户显示新片段时。我怎样才能做到这一点?setShareIntent 调用应该去哪里?
带有代码片段的较长版本
这是我的代码的骨架:
import android.support.v7.widget.ShareActionProvider;
public class SolvePuzzle extends ActionBarActivity {
private ShareActionProvider mShareActionProvider;
static AppSectionsPagerAdapter mAppSectionsPagerAdapter;
static ViewPager mViewPager;
...
public void onCreate(Bundle savedInstanceState) {
...
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
}
}
然后来了
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.solve_puzzle, menu);
MenuItem item = menu.findItem(R.id.menu_item_share);
mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
if (mShareActionProvider == null) {
// Following https://stackoverflow.com/questions/19358510/why-menuitemcompat-getactionprovider-returns-null
mShareActionProvider = new ShareActionProvider(this);
MenuItemCompat.setActionProvider(item, mShareActionProvider);
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, "Some text"); // For debugging
shareIntent.setType("text/plain");
setShareIntent(shareIntent);
Log.d(DEBUG_TAG, "Called new mShareActionProvider(this) and set share intent");
}
return true;
}
private void setShareIntent(Intent shareIntent) {
// Want to call this whenever new puzzle fragment is displayed
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
} else {
Log.d(DEBUG_TAG, "Could not set share intent: mShareActionProvider == null");
}
}
然后我有一个public class AppSectionsPagerAdapter extends FragmentPagerAdapter
和一个public class SolvePuzzleFragment extends Fragment implements OnClickListener
。
目前我在 SolvePuzzleFragment 的 onCreateView 中调用 setShareIntent。
这不起作用:当我查看我的 logcat 时,我看到来自片段的 setShareIntent 调用(前两行)发生在 SolvePuzzle 类(最后一行)的 onCreateOptionsMenu 调用之前:
12-12 12:39:26.505:D/Debug(3864):无法设置共享意图:mShareActionProvider == null
12-12 12:39:26.515:D/Debug(3864):无法设置共享意图:mShareActionProvider == null
12-12 12:39:26.565: D/Debug(3864): 调用新的 mShareActionProvider(this) 并设置共享意图
...看起来片段中有两个调用。这是因为当前片段和下一个片段都被创建(调用了它们的 onCreateView),即使只显示第一个片段?
看起来在片段的 onCreateView 中调用 setShareIntent 是一个错误。我想要做的是在向用户显示新片段时调用 setShareIntent 。我怎么做?
编辑:附加信息:
共享按钮当前有效,但它发送了我在 onCreateOptionsMenu 中为调试目的设置的“一些文本”消息。一旦第一个片段显示给用户(并且每次显示新片段时都会覆盖),我希望该意图被片段相关的意图覆盖。