在Android中滚动ListView时会丢失数据
我正在使用ListView显示某些行中的文本视图,而不是其他行中的文本视图。我不知道会有多少项目,它运行良好,但当我向下滚动时,显示发生了变化。在Android中滚动ListView时会丢失数据,android,listview,Android,Listview,我正在使用ListView显示某些行中的文本视图,而不是其他行中的文本视图。我不知道会有多少项目,它运行良好,但当我向下滚动时,显示发生了变化。 例如: 如果我在ListView中有10个项目,而其中只有5个项目当前可见。适配器将位置从0正确返回到4…没关系。当我向下滚动项目10的位置并返回顶部时,我会使我的所有项目看起来像列表中的第一个项目,如果我滚动多次,则会使第一个项目重复10次 我正在使用ArrayAdapter。 这里有一些代码: @Override public View g
例如: 如果我在ListView中有10个项目,而其中只有5个项目当前可见。适配器将位置从0正确返回到4…没关系。当我向下滚动项目10的位置并返回顶部时,我会使我的所有项目看起来像列表中的第一个项目,如果我滚动多次,则会使第一个项目重复10次 我正在使用ArrayAdapter。
这里有一些代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
PlanningHolder holder = null;
if (row == null) {
row = mInflater.inflate(layoutResourceId, parent, false);
holder = new PlanningHolder();
holder.numberOfJour = (TextView) row.findViewById(R.id.numberDate);
holder.lay = (LinearLayout) row.findViewById(R.id.layPlage);
row.setTag(holder);
} else {
holder = (PlanningHolder) row.getTag();
}
if(position%2 == 1){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
params.setMargins(50, 5, 30, 5);
//MarginLayoutParams marginLayoutParams = (MarginLayoutParams) params.getLayoutParams();
//marginLayoutParams.setMargins(marginleft, 5, display.getWidth() - marginright, 5);
TextView newplage = new TextView(context);
newplage.setLayoutParams(params);
newplage.setBackgroundColor(context.getResources().getColor(R.color.darkorrange));
holder.lay.addView(newplage);
}
holder.numberOfJour.setText(myPlannig.getCurrent().get(Calendar.DAY_OF_MONTH) + "");
row.setId(position);
return row;
}
这是我的listView声明:
<ListView
android:id="@+id/list_planning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/top_shadow"
android:scrollingCache="true"
android:dividerHeight="1dp">
</ListView>
该问题是由重用
convertView
引起的。或者禁用错误优化
View row = null;
或者通过执行if
的else
分支来修复优化,并针对这种情况适当地设置行
视图numberDate
,layplate
请注意,您正在将视图添加到
holder.lay
,但从未删除它们。当您滚动和重用convertView
时,它们会累积。该问题是由重用convertView
引起的。或者禁用错误优化
View row = null;
或者通过执行if
的else
分支来修复优化,并针对这种情况适当地设置行
视图numberDate
,layplate
请注意,您正在将视图添加到
holder.lay
,但从未删除它们。当您滚动和重用convertView
时,它们会累积。这是列表视图中的常见情况。你必须正确处理“如果”和“否则”的情况
例如,如果将文本设置为if case而不是else case,则旧值将被保留。列表视图中的视图正在被回收
当您第一次打开列表视图时,它将被创建
当您来回滚动时,您正在一个已有值的视图上加载数据
无论您在
getView
中的if情况下处理什么,您都必须在else中撤消它。换句话说,您必须在getView
方法中处理代码流的每种情况或路径中的视图。这是列表视图中的常见情况。你必须正确处理“如果”和“否则”的情况
例如,如果将文本设置为if case而不是else case,则旧值将被保留。列表视图中的视图正在被回收
当您第一次打开列表视图时,它将被创建
当您来回滚动时,您正在一个已有值的视图上加载数据
无论您在
getView
中的if情况下处理什么,您都必须在else中撤消它。换句话说,您必须在getView
方法中处理代码流的每种情况或路径中的视图
else
{
lay.addView(newplage);
}
把其他条件像这样
else
{
lay.addView(newplage);
}
感谢您的回答,但在其他情况下,我不会在没有任何视图的情况下使用我的
holder.lay
。因此,请将它们从holder.lay
中的else
块中删除。感谢您的回答,但在其他情况下,我不会在没有任何视图的情况下使用我的holder.lay
。因此,请从else
块中的中删除它们。