0

我的问题类似于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 中为调试目的设置的“一些文本”消息。一旦第一个片段显示给用户(并且每次显示新片段时都会覆盖),我希望该意图被片段相关的意图覆盖。

4

1 回答 1

1

我怎样才能做到这一点?setShareIntent 调用应该去哪里?

OnPageChangeListener使用您的ViewPager viasetOnPageChangeListener()注册一个,然后将您的setShareIntent()呼叫放入onPageSelected()侦听器中。

于 2014-12-12T12:37:39.057 回答