ShareActionProvider刷新文本

我有一个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()); } 

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

Solutions Collecting From Web of "ShareActionProvider刷新文本"

也许有点矫枉过正,但是每当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) { }}); 

我偶然发现了同样的问题,并通过将我的共享意图作为我的活动中的成员variables解决。 我将其设置为ShareActionProviderShareActionProvider的共享意图,然后我可以从活动中的任何位置更新意图。 为了避免重新创build你的意图,并在其中有两个条目,你可以把你的更新放在一个Bundle并使用Intent.replaceExtras(Bundle extras)replaceintent中的Intent.replaceExtras(Bundle extras) 。 这对我有效。 祝你好运。

要更新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中使用这个类。