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.

  • Uso de ShareActionProvider con el botón en el diseño
  • ShareActionProvider no funciona cuando showAsAction = ifRoom
  • Excepción de puntero nulo al usar el proveedor de acciones de la biblioteca de soporte
  • ¿Cómo ocultar el icono de acción compartida (que utiliza más) cerca del proveedor de acciones compartidas?
  • Tamaño del problema de ShareAction en ActionBar con ShareActionProvider-v7
  • onPrepareSubMenu en un ActionProvider personalizado nunca llamado
  • Icono personalizado de Android ShareActionProvider?
  • No se puede emitir Proveedor de acciones para compartir el proveedor de acciones
  • ActionBarSherlock problema ShareActionProvider
  • ¿Cuál es el uso del espacio de nombres de aplicaciones en android xml
  • Compartir imagen con ShareActionProvider de Picasso
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.