android - 尝试动态更改列表适配器中 textview 的颜色时出现奇怪的变化

标签 android android-listview baseadapter

我有一个 listfragment,我正在填充一个扩展 Base 适配器的适配器。 我希望某个特定的 TextView 具有不同的颜色。

这是我的目标:(请原谅我的“标题”拼写,我很匆忙)

但是,当我上下滚动列表时,来自不同行的 TextView 也会随机改变颜色,如下所示:

我试过使用和不使用取景器,结果相同。我似乎无法找出问题所在。

这是我的getView方法

 @Override

public View getView(int position, View convertView, ViewGroup parent) {

     ViewHolderItem viewHolder;

    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.shedrow, null);

        viewHolder = new ViewHolderItem();
        viewHolder.txt=(TextView) convertView.findViewById(R.id.textview1);
        viewHolder.txt2=(TextView) convertView.findViewById(R.id.textview2);
        convertView.setTag(viewHolder);

    }
    else
    {
          viewHolder = (ViewHolderItem) convertView.getTag();

    }
    viewHolder.txt.setTypeface(tf);
    viewHolder.txt2.setTypeface(tf);
    viewHolder.txt.setText(schedStorage.getProgramTitle(position));

    if (position==0) 
    {
             viewHolder.txt2.setTextColor(color);
     viewHolder.txt2.setTypeface(tf, Typeface.BOLD);
    }

    viewHolder.txt2.setText(sTimes.get(position));

    return convertView;
}

最佳答案

convertView是一个复用的View(Row)。当您上下滚动并且第一行离开屏幕时,Android 可能会选择在屏幕上显示新行时重新使用它。如果它被重用,txt2 的颜色仍将设置为绿色。为避免这种情况,您应该在 position != 0 时设置 txt2 的颜色和字体。

if (position==0) {
   viewHolder.txt2.setTextColor(color);
   viewHolder.txt2.setTypeface(tf, Typeface.BOLD);
} else {
   viewHolder.txt2.setTextColor(Color.BLACK);
   viewHolder.txt2.setTypeface(tf, Typeface.NORMAL);
}

关于android - 尝试动态更改列表适配器中 textview 的颜色时出现奇怪的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849307/

相关文章:

android - 在 ListView 中使用 holder 作为 textview

javascript - react child 应用程序定位按钮

android - Firebase 中 IN 关键字的替代是什么?

android - ListView 上的动画背景

java - 如何从带有基本适配器的 GridView 中选择单个编辑文本框?

java.lang.IndexOutOfBoundsException :Invalid index x, 大小为 x

android - MainActivity.java中的问题,尝试使用切换按钮

android - 我的库如何在 Android Studio 中导入另一个库?

android - 如何将信息查询放入 ListView ?

android - 从 customAdapter 中的 ListView 获取文本