Actualizar texto de ShareActionProvider

Tengo un EditText que se llena inicialmente con el texto del db local. Cuando el usuario abandona la pantalla (onPause), el texto actualizado se almacena en el db local. También tengo un ShareActionProvider (usando ActionBarSherlock).

Cuando el usuario utiliza ShareActionProvider, el texto antiguo se envía a la aplicación de destino. ¿Cómo puedo actualizar el envío de texto a través de la actionprovider cuando el usuario presiona el elemento de menú?

@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; } 

Parece que onOptionsItemSelected () no se llama cuando el usuario presiona el elemento de menú. Así que probé la siguiente onPause (), sin suerte:

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

BTW: Este código está todo en un fragmento.

Tal vez un poco excesivo, pero lo conseguí trabajando estableciendo la intención de compartir cada vez que se cambia el campo EditText. He añadido un oyente 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) { }}); 

Tropecé con el mismo problema y resolví tener mi intención de parte como una variable de miembro en mi actividad. Lo configuro como la intención de compartir en ShareActionProvider en onCreateOptionsMenu y luego puedo actualizar la intención desde cualquier parte de la actividad. Para evitar tener que recrear su intención y tener entradas dobles en ella, puede poner sus actualizaciones en un Bundle y reemplazar los extras en la intención con Intent.replaceExtras(Bundle extras) . Esto funcionó para mí. Buena suerte.

Para actualizar el shareIntent supongo que tendrá que anular onPrepareOptionsMenu también

Así que en OnPrepareOptionsMenu. OnPrepareOptionsMenu se llama cada vez justo antes de mostrar el menú. Call setshareintent de nuevo

 mActionProvider.setShareIntent(createShareIntent()); 

Editar: probar esto

  private class MyActionProvider extends ShareActionProvider{ public MyActionProvider(Context context) { super(context); } @Override public void onPrepareSubMenu(SubMenu subMenu) { setShareIntent(createshareintent()); super.onPrepareSubMenu(subMenu); } } 

Y utilizar esta clase en R.id.menu_item_share_action_provider_action_bar.

  • Compartir imagen y texto a través de whatsapp
  • ¿Cuál es el uso del espacio de nombres de aplicaciones en android xml
  • Tamaño del problema de ShareAction en ActionBar con ShareActionProvider-v7
  • No se puede emitir Proveedor de acciones para compartir el proveedor de acciones
  • Android ShareActionProvider funciona en el modo de depuración pero no en el dispositivo real
  • ShareActionProvider no funciona cuando showAsAction = ifRoom
  • ShareActionProvider con un icono - buscando como simple actionitem
  • No se puede emitir de ActionProvider a ShareActionProvider
  • Icono personalizado de Android ShareActionProvider?
  • ActionBarSherlock problema ShareActionProvider
  • Cómo manejar ShareActionProvider evento onClick
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.