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());
}
BTW:этот код находится во фрагменте.
3 ответов
возможно, немного перебор, но я получил его работу, установив намерение share каждый раз, когда поле 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) {
}});
я наткнулся на ту же проблему, и я решил, имея намерение моей доли в качестве переменной-члена в моей деятельности. Я установил его как намерение поделиться в ShareActionProvider
на onCreateOptionsMenu
и затем я могу обновить намерение из любой точки действия. Чтобы избежать необходимости воссоздавать свое намерение и иметь двойные записи в нем, вы можете поместить свои обновления в Bundle
и замените дополнительные функции в intent на 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.