我的ListView包含两个Textviews。在一行中,第一行用于名称,第二行用于结果。我需要根据结果更改结果TextView的背景色。例如,如果通过,则当失败时,结果TextView颜色将为绿色。结果TextView颜色将为红色。我的ListView中有10行。我试过这样做
@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;
}但是,当滚动列表的另一个随机项目的背景颜色changing.what时,我必须做。如何控制列表视图中每个位置的项。上面的代码只针对第一行。我说的对吗?
发布于 2013-05-17 13:14:49
尝尝这个
@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;
}发布于 2013-05-17 13:07:19
我认为这是因为列表视图回收了视图,从而导致了以下.Try问题:
@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,因此每次都会膨胀.Hence行,从而阻止视图的重复使用。
链接:Listview android recycling此链接解释了循环使用视图的机制。
中使用以下代码
android:cacheColorHint="#00000000"
发布于 2013-05-17 13:07:47
你必须做这样的事情,
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);
}
}https://stackoverflow.com/questions/16601760
复制相似问题