3 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
您應該按以下方式嘗試:
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater vi = (LayoutInflater)
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.element_in_game, null);
holder.scoreToUpdate = (EditText) convertView
.findViewById(R.id.elementUpdateScore);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
//binding data from array list
holder.scoreToUpdate.setText(scoresToUpdate[position]);
holder.scoreToUpdate.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
//setting data to array, when changed
scoresToUpdate[position] = s.toString();
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
return convertView;
}
說明:ListView的回收行為實際上會在視力不佳時擦除與其行項目綁定的所有數(shù)據(jù)。因此,無論需要從哪個方向重新綁定數(shù)據(jù),每一個新的行都會出現(xiàn)。另外,當EditText文本更改時,還必須將值保留在某些數(shù)據(jù)結構中,因此稍后再次進行行數(shù)據(jù)綁定時,可以提取位置數(shù)據(jù)。您可以使用數(shù)組ArrayList來保留edittext數(shù)據(jù),也可以用于綁定數(shù)據(jù)。
Recyclerview Adapter中使用類似的行為,在邏輯背后,您需要了解適配器的行數(shù)據(jù)的數(shù)據(jù)綁定。

TA貢獻2012條經(jīng)驗 獲得超12個贊
如果只有10行,請不要理會ListView。只需將它們垂直放置LinearLayout并用包裹即可,ScrollView這將為您節(jié)省一些麻煩。
如果您要擁有數(shù)十行或數(shù)百行,我建議您想出比行中的EditText窗口小部件更好的UX范例 ListView。
話雖這么說,感覺就像您沒有正確處理行回收,或沒有意識到行被回收。如果您的中有10個項目ListAdapter,并且只有空間顯示5個帶有EditText小部件的行,則EditText當用戶滾動到底部時,不應顯示10 個小部件。您應該以5-7結束-屏幕上的那個,或者當用戶下一次滾動時,另外一個或兩個可以回收。
這個免費的摘錄從我的書一個經(jīng)過創(chuàng)建自定義子類的過程ArrayAdapter,并得到回收利用工作。它還涵蓋了使用RatingBar用戶輸入的交互式行。這比起來容易得多EditText,因為您只需要擔心單擊事件。歡迎您嘗試使用EditText小部件和TextWatcher偵聽器擴展該技術,但我不是粉絲。
- 3 回答
- 0 關注
- 742 瀏覽
添加回答
舉報