ListView mit EditText - Eingabe wird nicht übernommen

T

Tom299

Stammgast
122
Hallo,

ich bin gerade total am verzeifeln. Hab in meinem Projekt eine ListView, die u.a. EditText Views enthält. Android Version ist 2.3.3.

Die Eingaben, die ich in den EditTexten mache, werden immer wieder zurückgesetzt und ich kapiers einfach nicht mehr.

In meinem richtigen Projekt hab ich noch FocusListener, TextWatcher und InputFilter dabei, aber ich hab nun ein Testprojekt angelegt, erst mal ganz ohne diese Listener und habe das gleiche Verhalten ...

Vielleicht hat jemand eine Idee, woran es liegen könnte, daß die Eingabe immer wieder zurückgesetzt wird.

Außerdem wird die Numerische Tastatur immer durch die Text-Tastatur überblendet. Für das EditText gilt android:inputType="numberDecimal" und die Num-Tastatur kommt auch beim Klick, aber direkt danach wird sie überblendet, was ich auch nicht verstehe. Das hat alles schon mal funktioniert ...

(Übrigens, in meinem richtigen Projekt mit TextWatcher bekomm ich beim Aufrufen der View schon 2 oder 3 mal ein TextChange für jedes Edit-Element auf der ListView. Und wenn ich in 1 Feld was ändere werden alle Felder wieder auf ihren letzten Wert gesetzt ... alles komisch)

Im Anhang hab ich das Test-Projekt als Zip-File, falls es sich mal jemand ansehen möchte.

Die Klassen und XML sehen so aus:
Code:
public class EditListViewTestActivity extends Activity {

	private ListView listViewUser = null;
	private UserArrayAdapter adapterUser;
	private ArrayList<User> listUser;

	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
		listViewUser = (ListView)findViewById(R.id.user_listView);
		listUser = new ArrayList<User>();
		adapterUser = new UserArrayAdapter(this, R.layout.user_table_item, listUser);
		listViewUser.setAdapter(adapterUser);
		
		listUser.add(new User("AAAAA", 12));
		listUser.add(new User("BBBBB", 22));
		listUser.add(new User("CCCCC", 32));
		listUser.add(new User("DDDDD", 42));
		listUser.add(new User("EEEEE", 52));
		
		adapterUser.notifyDataSetChanged();
    }
    
}

Code:
public class UserArrayAdapter extends ArrayAdapter<User> {

	private int resource;
	private TableLayout userView;
	
	
	public UserArrayAdapter(Context context, int resourceId, List<User> listUser) {
		super(context, resourceId, listUser);
		this.resource = resourceId;		
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		final User user = getItem(position);
		
		if (convertView == null) {
			userView = new TableLayout(getContext());
			LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			inflater.inflate(resource, userView, true);			
		}
		else {
			userView = (TableLayout)convertView;
		}
		
		TextView tvName = (TextView)userView.findViewById(R.id.user_tvName);
		tvName.setText(user.getName());
		
		EditText editAge = (EditText)userView.findViewById(R.id.user_editAge);
		editAge.setText(user.getAge().toString());
		
		return userView;
	}
}

main.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" 
    />

    <ListView 
    	android:id="@+id/user_listView"
    	android:layout_width="fill_parent" 
    	android:layout_height="wrap_content"
    	android:descendantFocusability="beforeDescendants"
    	android:divider="@android:color/black"
    	android:dividerHeight="1dp"
    />
</LinearLayout>

user_table_item.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
  	xmlns:android="http://schemas.android.com/apk/res/android"
  	android:layout_width="fill_parent"
  	android:layout_height="fill_parent">
  	<TableRow
  		android:id="@+id/user_table_item_row" 
		android:layout_width="fill_parent" 
   		android:layout_height="wrap_content"
 		android:paddingTop="3dp"
   		>
	    <TextView 
	    	android:id="@+id/user_tvName" 
	    	android:layout_width="0dp"
	    	android:layout_weight="0.5" 
	    	android:layout_height="wrap_content"
	    	android:singleLine="true"
	    	android:textAppearance="@android:style/TextAppearance.Medium"
	    	android:paddingLeft="3dp"
	    	android:gravity="left|center_vertical"
    	/>
	    <EditText 
			android:id="@+id/user_editAge"  
	    	android:layout_width="0dp"
	    	android:layout_weight="1.0"
	    	android:layout_height="wrap_content"
	    	android:textAppearance="@android:style/TextAppearance.Medium"
	    	android:singleLine="true"
	    	android:inputType="numberDecimal"
	    	android:gravity="center_vertical"
	    />
  	</TableRow>  	
</TableLayout>

PS: Ich hab die ListView auch schon ohne android:descendantFocusability="beforeDescendants" versucht, bringt aber nichts.
 

Anhänge

  • EditListViewTest.zip
    56,9 KB · Aufrufe: 87
Trägt man in der manifest android:windowSoftInputMode="adjustPan" für die Activity ein, dann verhält sich die Tastatur normal und die Nummern-Eingabe bleibt da.

Mit dem TextWatcher hab ich danach nur Probleme gehabt, bin jetzt wieder zu meinem FocusListener zurück und frage focusLost ab. Beim drücken des Back-Button erzwinge ich nun einen FocusLost, damit meine Eingabe auch erkannt wird, falls ich direkt nach der Eingabe mit BACK die Activity verlasse.
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.412
590239
5
M
  • MikelKatzengreis
Antworten
10
Aufrufe
206
swa00
swa00
A
Antworten
10
Aufrufe
1.017
swa00
swa00
Zurück
Oben Unten