2017-12-04 1 views
0

Ich möchte etwas passieren auf Text-Auswahl, die OnLongClickListener ist, aber innerhalb der ich muss ausgewählten Text, der standardmäßig OnLongClickListener behandelt wird (zumindest denke ich, es ist). Tatsächliches Ergebnis, indem ich nur meinen Listener hinzufüge, ist, dass meine Methode aufgerufen wird, ich versuche Indizes der Auswahlgrenzen zu bekommen, aber diese sind 0. Ich kann auch im Debugger sehen, dass in diesem Moment kein Text ausgewählt ist.Android hinzufügen Listener bei der Erhaltung der ursprünglichen

Code:

textView.setTextIsSelectable(true); 
textView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      int start = textView.getSelectionStart(); 
      int end = textView.getSelectionEnd(); 
      // the rest of code 
     } 
    } 
} 

Frage: Wie kann ich Standard-Listener erhalten, die zuerst genannt wird und Auswahl treffen und dann meine Funktion aufrufen.

+0

Mögliche Duplikat von [Wie ein Zuhörer auf den ausgewählten Text in Textview einrichten] (https://stackoverflow.com/questions/15091019/how-to - Einstellung eines Zuhörers - bei der ausgewählten Text-in-Text-Ansicht –

Antwort

0

Ich glaube, Sie missverstehen, wie Zuhörer arbeiten. Sie nicht ersetzen Standardverhalten, so gibt es keine Standard-Listener aufrufen, um sicherzustellen, dass etwas passiert.

In diesem Fall wird wahrscheinlich Ihr OnLongClick Listener einfach aufgerufen, bevor die TextView tatsächlich ihre Auswahl aktualisiert hat. In diesem Fall können Sie versuchen, Ihren Listener delay its processing zu haben, bis die Auswahl eingestellt ist. Sehen Sie sich dazu Handler.postDelayed() oder AsyncTask an. Zum Beispiel:

textView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      new Handler().post(() -> {/*your code here*/}); 
     } 
    } 
} 

Aber, was gesagt wird, OnLongClickListener ist nicht der richtige Listener für Textauswahl Änderungen zu verwenden. Sie benötigen einen ActionMode Rückruf statt:

How to set up a listener on the selected text in TextView

Verwandte Themen