gpt4 book ai didi

Android EditText 在 ListView 中滚动时丢失内容

转载 作者:搜寻专家 更新时间:2023-11-01 08:41:28 26 4
gpt4 key购买 nike

我有一个带有 EditText 的列表项,我不知道会有多少项。我在 EditText 中输入一些文本,然后向下滚动 ListView 时遇到问题,再次向上滚动后,我的第一个 EditText 中没有文本,或者 ListView 中的其他 EditText 中有一些文本。代码:

public class MatHangAdapter
extends ArrayAdapter<MatHangModel> {
private static final int LAYOUT_ITEM_MAP_DOWNLOAD = R.layout.item_mat_hang;

private final LayoutInflater mInflater;
Context context;
public MatHangAdapter(final Context context) {
super(context,
LAYOUT_ITEM_MAP_DOWNLOAD,
new CopyOnWriteArrayList<MatHangModel>());
this.mInflater = LayoutInflater.from(context);
this.context = context;

}


/**
* input data from outside.
*/
public void fillData(List<MatHangModel> dataModels) {
this.clear();
this.addAll(dataModels);
}

@Override
public long getItemId(final int position) {
return position;
}

@Override

public View getView(int position,
View convertView,
ViewGroup parent) {
final ViewHolder holder;
if (convertView != null) {
holder = (ViewHolder) convertView.getTag();
} else {
final View view =
this.mInflater.inflate(LAYOUT_ITEM_MAP_DOWNLOAD,
parent,
false);
holder = new ViewHolder(getContext(),
view);

view.setTag(holder);

convertView = view;
}
//fill data.
holder.fillData(this.getItem(position));

return convertView;
}

public static class ViewHolder {
private final Context mContext;
// Fields.
@InjectView(R.id.tv_scan_barcode)
TextView tvScanBarcode;
@InjectView(R.id.tv_qty_price)
TextView tvQtyPrice;
@InjectView(R.id.et_amount)
EditText etAmount;

public ViewHolder(Context context,
View view) {
ButterKnife.inject(this,
view);// Initialize UI controls.
mContext = context;
//apply fonts....
// CommonUtil.setFontForMainTitleTopicViewRecursive(tvItemMenu);

}

/**
* fill data.
*/
public void fillData(MatHangModel matHangModel) {
//fill data
if (matHangModel != null) {
tvScanBarcode.setText(CommonUtil.getStringData(matHangModel.getBracode()));
tvQtyPrice.setText(""+CommonUtil.getIntegerData(matHangModel.getPrice()));
etAmount.setText(""+CommonUtil.getIntegerData(matHangModel.getAmount()));
etAmount.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(final CharSequence charSequence,
int start,
int before, int count) {
}

@Override
public void onTextChanged(final CharSequence charSequence,
final int i,
final int i1,
final int i2) {
}

@Override
public void afterTextChanged(final Editable editable) {

}
});
}

}
@OnClick(R.id.tv_scan_barcode)
void onSceanBarcode(View view){
CommonUtil.showViewWithAnimation(Techniques.FadeIn,view);
}

}
}

最佳答案

这是因为 ListView 回收机制,您需要使用 EditText 的新值更新您的 Adapter 数据。

为了获得更好的性能,您可以在 TextWatcherafterTextChanged() 中执行此操作(仅当您完成编辑文本时才更新数据):

@Override
public void afterTextChanged(final Editable editable) {
// update your model
// matHangModel.setAmount(Integer.parseInt(editable.toString()));
// update your adapter data with the new value of "matHangModel"
}

编辑

1) 在您的适配器中添加一个更新方法:

public void updateItem(MatHangModel model, int position){
this.insert(model, position);
}

2) 更改您的 fillData 方法以将其作为参数传递给 position,因为您将在更新中需要它:

public void fillData(MatHangModel matHangModel, int position) {
//fill data
if (matHangModel != null) {
tvScanBarcode.setText(CommonUtil.getStringData(matHangModel.getBracode()));
tvQtyPrice.setText(""+CommonUtil.getIntegerData(matHangModel.getPrice()));
etAmount.setText(""+CommonUtil.getIntegerData(matHangModel.getAmount()));
etAmount.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(final CharSequence charSequence,
int start,
int before, int count) {
}

@Override
public void onTextChanged(final CharSequence charSequence,
final int i,
final int i1,
final int i2) {
}

@Override
public void afterTextChanged(final Editable editable) {
matHangModel.setAmount(Integer.parseInt(editable.toString())); // here you update your model data
updateItem(matHangModel, position); // here you update your adapter data
}
});
}

}

关于Android EditText 在 ListView 中滚动时丢失内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32168522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com