各行に1つのEditText-Fieldを持つListView(myList)を作成しました(R.id.mannschaften)。 ListViewの下で、ボタンを作成し、OnCreate()メソッドでOnClickListenerを設定しました。次に、ボタンをクリックすると、ListViewを反復処理して、すべての行のEditText-Fieldの値を取得し、String-Listに保存します。しかし、どうすればそれができますか?
ここに私のコードがあります:
private void ButtonClick() {
/** get all values of the EditText-Fields */
View v;
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < myList.getCount(); i++) {
v = myList.getChildAt(i);
et = (EditText) v.findViewById(R.id.mannschaften);
mannschaftsnamen.add(et.getText().toString());
}
.....
}
GetChildAtは表示されている行専用であることは既に知っていますが、それをどうやって変えるかはわかりません。
友人の助けを借りて問題を解決しました:
private void ButtonClick() {
/** get all values of the EditText-Fields */
View v;
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < myList.getCount(); i++) {
v = myList.getAdapter().getView(i, null, null);
et = (EditText) v.findViewById(i);
mannschaftsnamen.add(et.getText().toString());
}
....
}
myList.getAdapter().getView(i,null,null)
を使用する場合、アイテムビューの新しいインスタンスを取得するには、次のようなListView.getChildAt(position)
メソッドを試してください。
private void ButtonClick() {
/** get all values of the EditText-Fields */
View v;
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < myList.getCount(); i++) {
v = myList.getChildAt(i);
et = (EditText) v.findViewById(R.id.editText1);
mannschaftsnamen.add(et.getText().toString());
}
....
}
@Ariusからの答えは正解に近いと思います。 View
を含むView
はListView
を含むことを強調したいだけです。したがって、ListView
に関連するgetChildAt(position)
が必要です。
private void ButtonClick() {
/** get all values of the EditText-Fields
find your ListView local variable you had created for example :
private ListView listview;
You also need to catch null value of EditText first. */
ArrayList<String> mannschaftsnamen = new ArrayList<String>();
EditText et;
for (int i = 0; i < listview.getCount(); i++) {
et = (EditText) listview.getChildAt(i).findViewById(R.id.editText1);
if (et!=null) {
mannschaftsnamen.add(String.valueOf(et.getText()));
/** you can try to log your values EditText */
log.v("ypgs", String.valueOf(et.getText()));
}
}
....
}
選択した回答が「et =(EditText)v.findViewById(i);」でnullをスローすることがある理由について
その時点で、以前に選択したビュー内で位置iのアイテムを選択しようとしていませんか?したがって、リスト全体のアイテムよりも子ビューのアイテムの数が少ない場合、存在しないアイテムを選択しようとするため、nullになります。
おそらく、ネストされたループはこの問題を解決できますか?または、必要な要素のインデックスが既にわかっている場合は、単純にインデックスを直接指定します。