ShareActionProvider aktualisieren Text

Ich habe eine EditText, die zunächst mit Text aus dem lokalen db gefüllt ist. Wenn der Benutzer den Bildschirm verlässt (onPause), wird der aktualisierte Text im lokalen db gespeichert. Ich habe auch einen ShareActionProvider (mit ActionBarSherlock).

Wenn der Benutzer den ShareActionProvider verwendet, wird der alte Text an die Zielanwendung gesendet. Wie kann ich den Text durch den Actionprovider senden, wenn der Benutzer den Menüpunkt drückt?

  • FindViewById für MenuItem gibt null zurück
  • Jar-Bindung von ActionBarSherlock für Mono für Android
  • Android ActionBar Anpassen der Suchansicht
  • Padding der Aktionsleiste "up" Indikator Bild
  • Menüpunkt Animation in ActionBarSherlock aktualisieren
  • InflateException: Der Menüpunkt konnte nicht auf Click-Handler aufgelöst werden
  • @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; } 

    Es scheint onOptionsItemSelected () wird nicht aufgerufen, wenn der Benutzer den Menüpunkt drückt. Also habe ich folgendes onPause () probiert, ohne Glück:

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

    BTW: Dieser Code ist alles in einem Fragment.

  • Android Canvas Wiederherstellen und Rückgängig
  • Unterschied zwischen START_STICKY und START_REDELIVER_INTENT?
  • Wie ändere ich ein Anwendungssymbol programmgesteuert in Android?
  • Verschiedene Fling (Swipe) Geschwindigkeit auf verschiedenen Android-Geräten mit der gleichen Dichte
  • Dialogaktivität zum Einfügen von Inhalten
  • Wie kann ich verhindern, dass meine Android App / Service von einem Task-Manager "getötet" wird?
  • 3 Solutions collect form web for “ShareActionProvider aktualisieren Text”

    Vielleicht ein bisschen übertrieben, aber ich habe es funktioniert, indem du die Share Intent jedes Mal, wenn das EditText-Feld geändert wird. Ich habe einen TextWatcher-Listener hinzugefügt:

      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) { }}); 

    Ich stolperte über die gleiche Frage und ich löste, indem ich meine Aktie Absicht als Mitglied Variable in meiner Tätigkeit. Ich ShareActionProvider es als die Aktie Absicht in der ShareActionProvider in onCreateOptionsMenu und dann kann ich die Absicht von überall in der Aktivität zu aktualisieren. Um zu vermeiden, dass Sie Ihre Absicht neu erstellen und doppelte Einträge haben, können Sie Ihre Updates in ein Bundle und die Extras in der Absicht mit Intent.replaceExtras(Bundle extras) ersetzen. Das hat für mich gearbeitet Viel Glück.

    Um das ShareIntent zu aktualisieren, denke ich, dass du auch aufPrepareOptionsMenu überschreiben musst

    Also in OnPrepareOptionsMenu. OnPrepareOptionsMenu wird immer aufgerufen, kurz bevor das Menü angezeigt wird. Rufen Sie wieder an

     mActionProvider.setShareIntent(createShareIntent()); 

    Bearbeiten: Versuchen Sie das

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

    Und benutze diese Klasse in R.id.menu_item_share_action_provider_action_bar.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.