2011-11-24 12 views
20

Mam problem z moim EditText. Używam następujący adapter:Android EdytujTekst w ListView - klawiatura

public class RowTextViewAdapter extends BaseAdapter { 

... 

    public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; 

    if (rowTitles.get(position).equals("edit")) { 
     if(et == null){ 
      et = new EditText(activity); 
      et.setText("Test"); 
     } 
     return et; 
    } 
    else { 
     convertView = new TextRow(activity); 
     holder = new ViewHolder(((TextRow) convertView).getTextView(), ((TextRow) convertView).getImageView()); 
     convertView.setTag(holder); 
     holder.getTextView().setText(StringManager.getInstance().getText(rowTitles.get(position), activity)); 
     holder.getImageView().setImageBitmap(assetController.getBitmap(additiveIcons.get(position) + ".png", null)); 
     return convertView; 
    } 
    } 
} 

i ListActivity:

public class AppSettingActivity extends ListActivity { 

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

     adapter = new RowTextViewAdapter(this); 
     adapter.addRowView("account", "arrowDw"); 
     adapter.addRowView("password", "arrowDw"); 
     setListAdapter(adapter); 
    } 

... 

    protected void onListItemClick(ListView listView, View view, int position, long id) { 
    switch (position) { 
     case 0: accIsEditable = adapter.setEditable(position); break; 
     case 1: 
      if(accIsEditable) { 
            //TODO do something.. 
       break; 
      } 
      pwIsEditable = adapter.setEditable(position); 
      break; 
      ... 
    } 
} 

Jeśli kliknięciu na pierwszej pozycji dodać nowy element listy na poz. 1 (pos: 0, 1, 2, ...). Teraz pole EditText zostaje dodane do listy.

ListView: 
----------------------------   -------------------------  
Account     v   Account    ^ 
---------------------------- ==> -------------------------  
Passowrd     v   [::::::::EditText:::::::]  
----------------------------   ------------------------- 
//more..        Password    v 
----------------------------   ------------------------- 
             //more.. 
             ------------------------- 

Gdybym teraz kliknąć w polu EditText, to pokazuje wirtualną klawiaturę i traci ostrość EditText. Klikam ponownie i zyskuje ostrość. Ale jeśli coś napiszę, tekst jest wyświetlany tylko w polu EditText, jeśli dotknę go i nie często, gdy piszę ...

Jakiś pomysł na naprawienie tego problemu z aktualizacją?

+0

To brzmi podobnie do tego problemu: http://stackoverflow.com/questions/6918494/edit-text-in-listactivity- listview-looses-focus-when-keyboard-comes-up Mam nadzieję, że pomoże :-) – atraudes

+0

Cóż, mam też problemy z ustawieniem ostrości. Próbowałem go z: 'addTextChangedListener' -> Debugowanie jest poprawne - pokazuje właściwy tekst. – Javatar

+0

Ale nie mogę dowiedzieć się, jak ustawić tekst ('EditText.setText (" nowy tekst słuchaczy ")') bez wyjątku. Nie znalazłem metody ponownego ustawienia FOCUS w EditText. Jedyne, co mogę zrobić, to wywołać 'getInstance(). NotifyDataSetChanged()' ale po tym zawsze muszę ręcznie kliknąć ponownie w polu EditText i zapisuje tylko jedną literę .. Z 'EditText.requestFocus () 'klawiatura nie jest wyświetlana, a EditText nie jest już w stanie ustawić ostrości – Javatar

Odpowiedz

38

Jeśli jest to nadal problem, przyjrzeć się tej pozycji: Focusable EditText inside ListView

Te zmiany mogą pomóc.

Zmiana ListView:

<ListView 
    android:id="@android:id/list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:descendantFocusability="beforeDescendants" 
    /> 

Zmiana aktywności w mainfest.xml:

<activity android:name= ".yourActivity" android:windowSoftInputMode="adjustPan"/> 
+0

Dzięki, ale zabrakło czasu, więc ...odrzucone – Javatar

+1

Dziękuję, to działało jak urok :) – Proxy32

+8

'android: windowSoftInputMode =" adjustPan "' sam działa dla mnie. – Pang

1

kilka razy podczas korzystania android:windowSoftInputMode="stateAlwaysHidden" w jawnym działalności lub XML, że czas aby stracić skupienie klawiatury. Najpierw sprawdź tę właściwość w twoim pliku xml i zamaskuj, jeśli jest, po prostu ją usuń. Po dodaniu tych opcji do pliku manifestu w działaniu bocznym android:windowSoftInputMode="adjustPan" i dodaj tę właściwość do widoku listy w xml android:descendantFocusability="beforeDescendants"

+0

bardzo prosta odpowiedź –