【发布时间】:2018-06-11 14:21:24
【问题描述】:
我在 android 中编写了一个可滚动的 listview,每行都有 textview 和 edittext。因为滚动时会出现问题,新数据会丢失,所以我在TextChangedListener 中更新我的ArrayList,如下所示:
TextWatcher txtwatch = 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.length() > 0) {
if (!scrolling) {
InhalteArr.set(position, s.toString());
}
}
}
@Override
public void afterTextChanged(Editable s) {
}
};
我现在的问题是,这种方法有效,但仅适用于前七行。以下行显示了正确的信息,但它们没有将更新的数据设置在ArrayList 中的正确位置。
我不明白为什么前七行正在做我想做的事,而其余的似乎又开始将更新的数据从零开始设置,而不是八行。
这非常令人毛骨悚然,因为所有行和最后一行似乎都从 ArrayList 中获取了正确的数据,但是最后一个视图行将数据设置在 ArrayList 中的错误位置。
在getView() 方法中我是这样设置数据的
viewHolder.Inhalt.setText(InhalteArr.get(position).toString());
but that works.
有人知道吗? 谢谢!
编辑:这是我的适配器:
public class SyAdapter extends ArrayAdapter<ArrayList> {
Typeface bahn = Typeface.createFromAsset(getContext().getAssets(), "fonts/bahnschrift.ttf");
Typeface ih = Typeface.createFromAsset(getContext().getAssets(), "fonts/corbel.ttf");
private static class ViewHolder {
TextView Merkmal;
TextView Inhalt;
}
ArrayList MerkmaleArr;
ArrayList InhalteArr;
public SyAdapter (Context context, ArrayList Merkmale, ArrayList Inhalte) {
super(context, R.layout.listanzeige, R.id.MerkmalT, Merkmale);
this.MerkmaleArr = Merkmale;
this.InhalteArr = Inhalte;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.listanzeige, parent, false);
viewHolder.Merkmal = (TextView) convertView.findViewById(R.id.MerkmalT);
viewHolder.Merkmal.setTypeface(bahn);
viewHolder.Inhalt = (TextView) convertView.findViewById(R.id.InhaltT);
viewHolder.Inhalt.setTypeface(ih);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
System.out.println("Aktuelle Position: " + position);
viewHolder.Inhalt.setText(InhalteArr.get(position).toString());
viewHolder.Merkmal.setText(MerkmaleArr.get(position).toString());
return convertView;
}}
EDIT2: 现在我发现所有位置 >7 的行在开头都已经 convertView != null,这意味着它们跳过了 if (convertView == null) 代码。但为什么呢?
【问题讨论】:
-
请发布您的适配器的代码。
-
覆盖两个方法
getItemId()和getItemViewTyoe()并在两者中返回位置。检查它是否在适配器中工作并发布适配器代码 -
我添加了适配器
标签: java android listview arraylist