Android Listview项目滚动时背景颜色发生变化
我的Android Listview项目滚动时背景颜色发生变化,android,android-listview,Android,Android Listview,我的列表视图包含两个文本视图。在一行中,第一行表示名称,第二行表示结果。我需要根据结果更改结果TextView的背景色。如果通过,则结果TextView颜色将在失败时变为绿色。结果TextView颜色将变为红色。我的列表视图中有十行。我试过这样做 @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub
列表视图
包含两个文本视图
。在一行中,第一行表示名称,第二行表示结果。我需要根据结果更改结果TextView
的背景色。如果通过,则结果TextView
颜色将在失败时变为绿色。结果TextView
颜色将变为红色。我的列表视图中有十行。我试过这样做
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.items, null);
holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle);
holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription);
holder.txtholder = (TextView) convertView.findViewById(R.id.holder1);
holder.img = (ImageView) convertView.findViewById(R.id.temperrr);
convertView.setTag(holder);
}
else
holder=(ViewHolder)convertView.getTag();
ItemBean bean = (ItemBean) itemList.get(position);
holder.imgViewLogo.setImageResource(bean.getImage());
holder.txtViewTitle.setText(bean.getTitle());
holder.txtViewDescription.setText(bean.getDescription());
//------------------
if (position==0)
{
if(GridviewAdapter.glu>=81)
{
holder.img.setImageResource(R.drawable.red_arrow);
holder.txtViewDescription.setBackgroundResource(R.color.resultred);
holder.txtholder.setBackgroundResource(R.color.resultred);
}
else if (GridviewAdapter.glu==79||GridviewAdapter.glu==80)
{
holder.img.setImageResource(R.drawable.orange_arrow);
holder.txtViewDescription.setBackgroundResource(R.color.resultoren);
holder.txtholder.setBackgroundResource(R.color.resultoren);
}
else
{
holder.img.setImageResource(R.drawable.resultarrawnocolor);
holder.txtViewDescription.setBackgroundResource(0);
holder.txtholder.setBackgroundResource(0);
}
}
holder.img.setImageResource(R.drawable.resultarrawnocolor);
return convertView;
}
但是,当滚动列表时,另一个随机项目的背景颜色会发生变化。我必须做什么。?如何控制listview中每个位置的项。以上代码仅适用于第一行。我说得对吗 我认为这是因为列表视图回收了视图,因此导致了此类问题。请尝试以下操作:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = null;
convertView = null;
row = convertView;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) _context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row, parent,
false);
// your code
}
return row;
}
由于convert视图和row视图都被初始化为null。因此每次行都会膨胀,从而防止视图的循环
链接:
此链接解释了回收视图的机制
- 如果错误的视图正在更改颜色,请使用上述代码
- 如果您试图在滚动背景变黑时触摸视图时说,请在列表视图中使用以下命令
android:cacheColorHint=“#00000000”
你必须这样做
if(Yourmark[position]<50) //Where Yourmark[] is the mark array you are passing to your custom adapter
{
holder.img.setImageResource(R.drawable.red_arrow);
holder.txtViewDescription.setBackgroundResource(R.color.resultred);
holder.txtholder.setBackgroundResource(R.color.resultred);
}
else
{
holder.img.setImageResource(R.drawable.green_arrow);
holder.txtViewDescription.setBackgroundResource(R.color.resultgreen);
holder.txtholder.setBackgroundResource(R.color.resultgreen);
}
}
if(你的标记[位置]试试这个
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.items, null);
holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo);
holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle);
holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription);
holder.txtholder = (TextView) convertView.findViewById(R.id.holder1);
holder.img = (ImageView) convertView.findViewById(R.id.temperrr);
convertView.setTag(holder);
}
else
holder=(ViewHolder)convertView.getTag();
ItemBean bean = (ItemBean) itemList.get(position);
holder.imgViewLogo.setImageResource(bean.getImage());
holder.txtViewTitle.setText(bean.getTitle());
holder.txtViewDescription.setText(bean.getDescription());
//**********SET ALSO YOUR DEFAULT BACKGROUND HERE******** like//
holder.txtViewDescription.setBackgroundResource(R.color.DEFAULCOLOR);
holder.txtholder.setBackgroundResource(R.color.DEFAULCOLOR);
holder.img.setImageResource(R.drawable.defalut_image);
//**********SET ALSO YOUR DEFAULT BACKGROUND HERE******** ok//
//------------------
if (position==0)
{
if(GridviewAdapter.glu>=81)
{
holder.img.setImageResource(R.drawable.red_arrow);
holder.txtViewDescription.setBackgroundResource(R.color.resultred);
holder.txtholder.setBackgroundResource(R.color.resultred);
}
else if (GridviewAdapter.glu==79||GridviewAdapter.glu==80)
{
holder.img.setImageResource(R.drawable.orange_arrow);
holder.txtViewDescription.setBackgroundResource(R.color.resultoren);
holder.txtholder.setBackgroundResource(R.color.resultoren);
}
else
{
holder.img.setImageResource(R.drawable.resultarrawnocolor);
holder.txtViewDescription.setBackgroundResource(0);
holder.txtholder.setBackgroundResource(0);
}
}
holder.img.setImageResource(R.drawable.resultarrawnocolor);
return convertView;
}
在适配器(自定义)上设置此代码,以便仅当选择视图时,才可以使用以前的颜色循环视图
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(
Context.LAYOUT_INFLATER_SERVICE );
Task task = taskArrayList.get(position);
View view = inflater.inflate(R.layout.task_row, parent, false);
if(MyActivity.getIsClicked() && MyActivity.getPositionClicked() == position){
view.setBackgroundResource(R.color.backgroundSelectedItem);
}
在ur urlistview.xml文件中使用android:cacheColorHint=“#00000000”GridviewAdapter.glu是什么GridviewAdapter.glu
?标记存储在哪里?标记显示在任何文本视图中?如果你可以发布整个课程或描述你在做什么,这将很容易得到帮助。嘿,谢谢你,但我在这行有问题row=inflater.inflate(R.layout.row,parent,false);其“rachita”不是“richita”!!如果您发布整个logcat错误消息,以便每个人都能看到确切的错误,这将更有帮助。检查此项,它可能会解决您的问题error@Rachita你不应该将convertview设置为空,所以?请让我知道它会导致任何问题吗?我通过这样做解决了问题。嘿,但它不会改变箭头的颜色,其他每一个东西是okei.holder.img.setImageResource(R.drawable.defaultImage);在同一个地方