在 android 中滚动列表视图时,文本值的顺序发生变化
Text values has order changes when scroll the listview in android
当我在列表视图中单击以编辑我的 EditText 时,项目的顺序发生了变化。我认为问题出在适配器上,但我不知道如何解决它。
例如:最后一项排到第二位。
适配器:
public class adapterAvaliacao extends BaseAdapter {
private LayoutInflater mInflater;
private List<Nota> itens;
DecimalFormat formatoNota = new DecimalFormat("#0.00");
public adapterAvaliacao(Context context, List<Nota> itens) {
this.itens = itens;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return itens.size();
}
@Override
public Nota getItem(int position) {
return itens.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint({ "ViewHolder", "InflateParams" }) @Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
Nota item = itens.get(position);
convertView = mInflater.inflate(R.layout.avaliacao_adapter, null);
((TextView) convertView.findViewById(R.id.lbl_nomeAtividade)).setText(item.getTitulo());
if (item.isLancada()) {
((EditText) convertView.findViewById(R.id.txt_notaPostada)).setText(String.valueOf(formatoNota.format(item.getNota() * 10 / item.getPeso())).replace(",", "."));
}
} else {
convertView.setTag(convertView.getTag());
}
return convertView;
}
是的,这是 listView 的正常行为,因此请根据需要将您的值存储在 arraylist 或模型中,以便您可以在滚动时设置它。
由于列表视图项目的回收,你必须这样做。
你的 setText 代码行应该写在 else 部分之后:
if (convertView == null) {
//your stuffs like find edit text
}
else {
convertView.setTag(convertView.getTag());
}
editText.setText("hello world");
当我在列表视图中单击以编辑我的 EditText 时,项目的顺序发生了变化。我认为问题出在适配器上,但我不知道如何解决它。
例如:最后一项排到第二位。
适配器:
public class adapterAvaliacao extends BaseAdapter {
private LayoutInflater mInflater;
private List<Nota> itens;
DecimalFormat formatoNota = new DecimalFormat("#0.00");
public adapterAvaliacao(Context context, List<Nota> itens) {
this.itens = itens;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return itens.size();
}
@Override
public Nota getItem(int position) {
return itens.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@SuppressLint({ "ViewHolder", "InflateParams" }) @Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
Nota item = itens.get(position);
convertView = mInflater.inflate(R.layout.avaliacao_adapter, null);
((TextView) convertView.findViewById(R.id.lbl_nomeAtividade)).setText(item.getTitulo());
if (item.isLancada()) {
((EditText) convertView.findViewById(R.id.txt_notaPostada)).setText(String.valueOf(formatoNota.format(item.getNota() * 10 / item.getPeso())).replace(",", "."));
}
} else {
convertView.setTag(convertView.getTag());
}
return convertView;
}
是的,这是 listView 的正常行为,因此请根据需要将您的值存储在 arraylist 或模型中,以便您可以在滚动时设置它。
由于列表视图项目的回收,你必须这样做。
你的 setText 代码行应该写在 else 部分之后:
if (convertView == null) {
//your stuffs like find edit text
}
else {
convertView.setTag(convertView.getTag());
}
editText.setText("hello world");