2012-10-30 18 views
5

Mam listing list, gdzie każdy wiersz jest EditText, z pewnym tekstem. Kiedy stukam w rząd, EditText skupia się, wyświetla migający kursor i kotwicę wyboru (znasz niebieskie/szare uchwyty, które przeciągasz, aby wybrać zakres tekstu).Zakotwiczenie selekcji EditText

Problem Problem polega na tym, że gdy przechodzę z jednego wiersza do drugiego (edittext na inny), bez dodawania nowego tekstu, kotwica wyboru w poprzednim edytorze pozostaje widoczna przez chwilę. Chciałbym ukryć tę kotwicę natychmiast, jeśli edittext nie ma ostrości.

Wszelkie pomysły?

ClearFocus Nie działa

 editText.setOnFocusChangeListener(new OnFocusChangeListener() {    
      public void onFocusChange(View v, boolean hasFocus) { 
       if(hasFocus) { 

       } else { 
        editText.clearFocus(); 
        //editText.clearComposingText();       
       } 
      } 
     }); 

Zrzut

The Problem

+0

To jest dziwne, czy testowany go na innych urządzeniach ?? – meh

+0

Mam tylko jedno urządzenie :( – States

+0

well the only "solution" próbuje wywołać clearFocus() na wszystkich innych komórkach, gdy jeden z twoich editekstów zyskuje ostrość, lub może twój adapter nie jest zapisany we właściwy sposób. ten adapter zamiast: http://thinkandroid.wordpress.com/2010/01/13/custom-baseadapters/ – meh

Odpowiedz

2

I wreszcie to! Przede wszystkim usunąłem możliwość ustawiania ostrości z poziomu ListView. Następnie napisałem niestandardowy OnFocusChangeListener, który usuwa zaznaczenie z widoku, który traci ostrość. Ten detektor jest stosowany do widoków przez niestandardową kartę (owinąłam ArrayAdapter, ale równie dobrze można owinąć SimpleCursorAdapter).

dołączony jest demo (testowane na emulatorze z Eclair):

public class ListOfEditViews extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ListView list = new ListView(this); 
     list.setAdapter(getAdapter()); 
     list.setFocusable(false); 
     list.setFocusableInTouchMode(false); 

     setContentView(list); 
    } 

    private ListAdapter getAdapter() { 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.edit_text, R.id.text) { 

      @Override 
      public View getView (int position, View convertView, ViewGroup parent) { 
       View view = super.getView(position, convertView, parent); 
       view.setFocusable(true); 
       view.setFocusableInTouchMode(true); 
       view.setOnFocusChangeListener(listener); 
       return view; 
      } 
     }; 

     String words = "Lorem ipsum dolor sit amen"; 

     for (String word: words.split(" ")) 
      adapter.add(word); 

     return adapter; 
    } 

    private OnFocusChangeListener listener = new OnFocusChangeListener() { 

     public void onFocusChange(View view, boolean hasFocus) { 
      view.dispatchWindowFocusChanged(hasFocus); 
     } 
    }; 
} 
+0

Spróbuj już teraz. Widok zwrócony przez getView (..) jest typem EditText? – States

+0

hmm, nie działa :(Teraz kotwica zostaje ustawiona na początek edittextu, a nie na koniec.Mam przeczucie, że jest to problem specyficzny dla wersji – States

+0

@States Zobacz aktualizację: Użyłem 'view.dispatchWindowFocusChanged (hasFocus) 'w słuchaczu ... Wydaje mi się, że to naprawdę hack, ale działa w moich testach – Raffaele