我一直在尋找對此的答案,但解決方案似乎不適用於我。我在列表項中有一個TextView和一個EditText。我正嘗試在用戶編輯EditTexts時更新存儲的值。ListView中的EditText在滾動時由onTextChanged更新
@Override
public View getView(int index, View convertView, ViewGroup parent) {
ViewHolder holder = null;
final int pos = index;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.user_details_list_row, parent,false);
holder = new ViewHolder();
holder.mCaptionTextView = (TextView)convertView.findViewById(id.user_detail_row_caption);
holder.mDetailEditText = (EditText)convertView.findViewById(id.user_detail_row_value);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.mDetailEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
mUserDetails.set(pos, s.toString());
}
});
holder.mCaptionTextView.setText(mUserCaptions.get(index));
holder.mDetailEditText.setText(mUserDetails.get(index),BufferType.EDITABLE);
return convertView;
}
public static class ViewHolder{
public TextView mCaptionTextView;
public EditText mDetailEditText;
}
當我這樣做,滾動觸發TextWatcher並更新值,覆蓋從其他EditTexts的一個重複文本正確的文本。
取而代之的是TextWatcher的,我也嘗試過這樣的代碼:
holder.mDetailEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
EditText et = (EditText)v.findViewById(id.user_detail_row_value);
mUserDetails.set(index, et.getText().toString().trim());
}
}
});
而且它還更新了錯誤的EditTexts。我在這裏錯過了什麼?
編輯:也試過這樣:
final ViewHolder testHolder = holder;
holder.mDetailEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus){
EditText et = (EditText)v.findViewById(id.user_detail_row_value);
mUserDetails.set(testHolder.ref, et.getText().toString().trim());
}
}
});
它糾正滾動變化問題我所看到的,但現在編輯EditTexts之一後,它改變了一堆其他的爲好。
我確實已經實現了getCount。它正在返回數據的大小,所以應該沒問題。 –
哦,我看到了,我認爲問題可能是您在'onFocusChange'函數中設置的索引值。無論何時,您都可以使用'setTag'方法設置EditText的值,並嘗試設置其索引。然後在你的'onFocusChange'方法中使用'getTag'方法恢復它。 – zozelfelfo
好的,將編輯索引添加到EditText本身就解決了整個問題。謝謝。 –