gpt4 book ai didi

java - ListView 滚动时不会保留 Edittext 的内容

转载 作者:行者123 更新时间:2023-12-01 18:32:25 26 4
gpt4 key购买 nike

我有对象(名称,数量)列表,我正在对话框中显示它。用户可以在任何项目的 EditText 中输入数量,并且我在列表之外有一个 TextView,我必须在其中显示完整列表的自动总和。

滚动列表时会发生随机行为,并且某些项目的数据已消失。

我的适配器代码是

public class CountCheckListAdapter extends ArrayAdapter<CountCheckList> {

List<CountCheckList> countCheckLists;
Context context;
String inputChange;
int value=0;

public CountCheckListAdapter(@NonNull Context context, int resource, @NonNull List<CountCheckList> objects) {
super(context, resource, objects);
this.countCheckLists = objects;
this.context = context;
}

public int getCount() {
return countCheckLists.size();
}

public CountCheckList getItem(int position) {
return countCheckLists.get(position);
}

public long getItemId(int position) {
return position;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItem = convertView;
if (listItem == null)
listItem = LayoutInflater.from(context).inflate(R.layout.count_check_list_item, parent, false);

CountCheckList countCheckList = countCheckLists.get(position);

TextView title = (TextView) listItem.findViewById(R.id.count_check_list_title);
title.setText(countCheckList.getBrandName());

TextInputEditText quantity = listItem.findViewById(R.id.quantity);
quantity.setText(String.valueOf(countCheckList.getDisplayQuantity()));

quantity.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {


if (s == null || s.toString().isEmpty()) {
} else {
value = Integer.parseInt(s.toString());
}

}

@Override
public void afterTextChanged(Editable s) {
countCheckLists.get(position).setDisplayQuantity(value);

}
});



return listItem;
}


}

自动求和代码是:

listView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
int totalQuantity = 0;
for (CountCheckList countCheckList : countCheckLists) {
totalQuantity = totalQuantity + countCheckList.getDisplayQuantity();
}

totalQuan.setText(totalQuantity + "");
}
});

我已经尝试了所有可能的方法,但编辑文本的滚动数据已经消失。请给我一些关于我如何完成这项任务的建议。提前致谢!

最佳答案

一旦 afterTextChanged() 中的数据更新,您需要调用 adapterInstance.notifyDataSetChanged()

尝试一下

    @Override
public void afterTextChanged(Editable s) {
countCheckLists.get(position).setDisplayQuantity(value);
notifyDataSetChanged(); //YOU NEED TO ADD THIS LINE
}

关于java - ListView 滚动时不会保留 Edittext 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60135829/

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