gpt4 book ai didi

android - 自定义ArrayAdapter + ListView,部分行没有正确处理

转载 作者:行者123 更新时间:2023-11-30 04:16:06 25 4
gpt4 key购买 nike

这篇文章将大量使用图片。

我创建了一个自定义 ArrayAdapter 并在 Listview 上使用它。我在适配器上遗漏了什么吗?

   @Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ArrayHolder holder = null;

if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ArrayHolder();
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
else
{
if(position % 2 == 0){row.setBackgroundColor(Color.DKGRAY);}
else{row.setBackgroundColor(Color.BLACK);}

Typeface font1 =Typeface.createFromAsset(context.getAssets(),"fonts/kingrich.ttf");
((TextView)row.findViewById(R.id.txtTitle)).setTypeface(font1);
((TextView)row.findViewById(R.id.txtTitle)).setTextColor(Color.rgb(153, 255, 102));

holder = (ArrayHolder)row.getTag();

}

String array = data.get(position);
holder.txtTitle.setText(array);
return row;
}

当我第一次启动应用程序时,会显示以下屏幕:(屏幕来自实际设备而非模拟器)

After app is initialized

现在,如果我使用后退按钮关闭虚拟键盘,当我向下滚动一点时,在底部我已经可以看到一行颜色不正确:

Scroll down a little to see the "bad" row

如果我上下滚动,该行的颜色将会正确。

提前致谢

最佳答案

在我看来,您没有正确处理新 View 的创建。

文本显示为白色,这告诉我们跳过了 else block (因此 convertView 参数为空,或者没有要回收的 View (这是公平的,因为当软键盘消失时您会看到更多 View )

向上/向下滚动后该行的颜色正确,因为您现在有要回收的 View ,因此您将进入 else block 。

恕我直言,您应该完全删除 else 关键字。这样您将仅在实际需要时输入 if(您创建新 View 的位置),否则即使 View 是新的且未回收,您也将始终输入正确的颜色。

试一试,告诉我它是否有效

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ArrayHolder holder = null;

if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ArrayHolder();
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
//this part must be executed every time, not only for recycled views
if(position % 2 == 0){row.setBackgroundColor(Color.DKGRAY);}
else{row.setBackgroundColor(Color.BLACK);}

Typeface font1 = Typeface.createFromAsset(context.getAssets(), "fonts/kingrich.ttf");
((TextView)row.findViewById(R.id.txtTitle)).setTypeface(font1);
((TextView)row.findViewById(R.id.txtTitle)).setTextColor(Color.rgb(153, 255, 102));

holder = (ArrayHolder)row.getTag();



String array = data.get(position);
holder.txtTitle.setText(array);
return row;
}

关于android - 自定义ArrayAdapter + ListView,部分行没有正确处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993746/

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