首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ShareActionProvider刷新文本

ShareActionProvider刷新文本
EN

Stack Overflow用户
提问于 2012-10-17 05:12:28
回答 3查看 2.1K关注 0票数 11

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

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

代码语言:javascript
复制
@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(),但没有成功:

代码语言:javascript
复制
@Override
public void onPause() {
    super.onPause();
    mActionProvider.setShareIntent(createShareIntent());
    // save to db:
    getActivity().saveText(editText.getText().toString());
}

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-18 04:09:07

也许有点夸张,但我通过在每次更改EditText字段时设置共享意图来使其正常工作。我添加了一个TextWatcher监听器:

代码语言:javascript
复制
    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) {
        }});
票数 8
EN

Stack Overflow用户

发布于 2013-07-05 18:25:08

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

票数 2
EN

Stack Overflow用户

发布于 2012-10-17 05:20:49

要更新shareIntent,我猜您也必须重写onPrepareOptionsMenu

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

代码语言:javascript
复制
mActionProvider.setShareIntent(createShareIntent());

编辑:试试这个

代码语言:javascript
复制
 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.中使用这个类

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12923492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档