11

我有一个 EditText,它最初填充了来自本地数据库的文本。当用户离开屏幕(onPause)时,更新的文本存储在本地数据库中。我还有一个 ShareActionProvider(使用 ActionBarSherlock)。

当用户使用 ShareActionProvider 时,旧文本被发送到目标应用程序。当用户按下菜单项时,如何刷新通过 actionprovider 发送的文本?

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.share_action_provider, menu);
    MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar);
    mActionProvider = (ShareActionProvider) actionItem.getActionProvider();
    mActionProvider.setShareIntent(createShareIntent());
}

private Intent createShareIntent() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString());
    return shareIntent;
}

当用户按下菜单项时,似乎没有调用 onOptionsItemSelected() 。所以我尝试了以下onPause(),但没有运气:

@Override
public void onPause() {
    super.onPause();
    mActionProvider.setShareIntent(createShareIntent());
    // save to db:
    getActivity().saveText(editText.getText().toString());
}

顺便说一句:这段代码都在一个片段中。

4

3 回答 3

8

也许有点矫枉过正,但我​​通过在每次更改 EditText 字段时设置共享 Intent 来实现它。我添加了一个 TextWatcher 监听器:

    editText.addTextChangedListener(new TextWatcher(){
        @Override
        public void afterTextChanged(Editable s) {
             if(mActionProvider!=null) {
                    mActionProvider.setShareIntent(createShareIntent());
             }
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }});
于 2012-10-17T20:09:07.423 回答
2

我偶然发现了同样的问题,我通过将我的共享意图作为我的活动中的成员变量来解决。ShareActionProvider我将其设置为 in中的共享意图,onCreateOptionsMenu然后我可以从活动中的任何位置更新意图。为避免重新创建意图并在其中包含重复条目,您可以将更新放在 aBundle中,并将意图中的附加内容替换为Intent.replaceExtras(Bundle extras). 这对我有用。祝你好运。

于 2013-07-05T10:25:08.033 回答
1

要更新 shareIntent 我猜你也必须覆盖onPrepareOptionsMenu

所以在 OnPrepareOptionsMenu 中。每次显示菜单之前都会调用 OnPrepareOptionsMenu。再次调用 setshareintent

mActionProvider.setShareIntent(createShareIntent());

编辑:试试这个

 private class  MyActionProvider extends ShareActionProvider{

    public MyActionProvider(Context context) {
        super(context);

    }

    @Override
    public void onPrepareSubMenu(SubMenu subMenu) {
        setShareIntent(createshareintent());
        super.onPrepareSubMenu(subMenu);
    }

 }

并在 R.id.menu_item_share_action_provider_action_bar 中使用这个类。

于 2012-10-16T21:20:48.800 回答