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:
main.xml
user_table_item.xml
PS: Ich hab die ListView auch schon ohne android:descendantFocusability="beforeDescendants" versucht, bringt aber nichts.
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.