我有一个EditText,它最初由本地数据库中的文本填充。当用户离开屏幕(onPause)时,更新的文本被存储在本地db中。我还有一个(使用ActionBarSherlock的) ShareActionProvider。
当用户使用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());
}顺便说一句:这些代码都包含在一个片段中。
发布于 2012-10-18 04:09:07
也许有点夸张,但我通过在每次更改EditText字段时设置共享意图来使其正常工作。我添加了一个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) {
}});发布于 2013-07-05 18:25:08
我偶然发现了同样的问题,我通过将我的共享意图作为我的活动中的成员变量来解决。我在onCreateOptionsMenu的ShareActionProvider中将其设置为共享意图,然后我可以从活动中的任何位置更新意图。为了避免重新创建intent并在其中包含两个条目,您可以将更新放在Bundle中,并用Intent.replaceExtras(Bundle extras)替换intent中的额外内容。这对我很有效。祝好运。
发布于 2012-10-17 05:20:49
要更新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.中使用这个类
https://stackoverflow.com/questions/12923492
复制相似问题