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ú?
- ActionBarSherlock & ShareActionProvider causar InflateException
- ¿Cómo ocultar el icono de acción compartida (que utiliza más) cerca del proveedor de acciones compartidas?
- onPrepareSubMenu en un ActionProvider personalizado nunca llamado
- Yo uso ShareActionProvider en PopupMenu, pero mostrar dos PopupMenu?
- Excepción de puntero nulo al usar el proveedor de acciones de la biblioteca de soporte
@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.
- Uso de ShareActionProvider con el botón en el diseño
- ShareActionProvider para el nivel de API inferior a 14
- ¿Pasar la URL de WebView a ShareActionProvider?
- ShareActionProvider no se puede hacer clic y no se procesa correctamente en el primer procesamiento
- Android: ShareActionProvider sin historial
- Android: XML personalizado para ShareActionProvider
- Aspecto de ShareActionProvider
- Sólo cuatro opciones para ShareActionProvider con ActionBarSherlock
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.
- Cómo deshabilitar evento de clic de marcador?
- Problema con la eliminación de la polilínea google map v2 android