2014-10-01 67 views
1

我需要改变每一行的背景色上使用自定义列表视图列表视图我的.I'm。android-改变自定义列表视图背景的某些行

每一行都有一个RelativeLayout的,我改变这样的:

public View getView(int position, View convertView, ViewGroup parent) { 
........ 
if (convertView == null) { 
       convertView = inflater.inflate(R.layout.item, null); 
       holder = new ViewHolder(); 
       holder.rl=(RelativeLayout)convertView.findViewById(R.id.rl); 
       holder.rl.setBackgroundResource(R.drawable.roundcorner); 
       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 
     holder.rl.setBackgroundResource(R.drawable.round_corner_vip); 
}} 

我不改变每行的bakcground,我只是改变了一些人。

我想知道它是一个坏主意?我的意思是,它是否消耗大量内存,并且对性能不利?

感谢

+2

尝试在位置改变背景碱或设置在每个列表项目数据特定的背景标记,并设置在此基础上的标志值。 – 2014-10-01 05:25:54

+0

@HareshChhelana感谢您的回复,你能看到下一个答案吗?你是这个意思吗 ?如果是这样,我已经添加了问题的评论, – mohsen 2014-10-01 14:20:13

回答

3

是的,你可以根据PositiongetView()改变ListView行的背景颜色。 将此代码放入您的getView()方法中。我已经使用位置% 4的重复颜色后4th item

switch (position % 4) { 
     case 0: 
      convertView.setBackgroundColor(Color.BLACK); 
      break; 
     case 1: 
      convertView.setBackgroundColor(Color.RED); 
      break; 
     case 2: 
      convertView.setBackgroundColor(Color.GREEN); 
      break; 
     case 3: 
      convertView.setBackgroundColor(Color.GRAY); 
      break; 
     default: 
      break; 
     } 

如果您有ListView中修复项目,然后你也可以根据

位置
 if(position == 0) { 
      convertView.setBackgroundColor(Color.BLACK); 
     } else if(position == 1) { 
      convertView.setBackgroundColor(Color.RED); 
     } else if(position == 2) { 
      convertView.setBackgroundColor(Color.GRAY); 
     } else if(position == 3) { 
      convertView.setBackgroundColor(Color.GREEN); 
     } 

希望它可以帮助改变颜色!

你有两种类型的可绘制 roundcorner and round_corner_vip所以我认为你必须设置一个VIP flag作为@Haresh Chhelana在评论中说,然后在您的适配器类 getView()你应该做这样的事情的
+0

感谢您的答复,它改变ListView的行的背景颜色,就像我说的,我有一个自定义布局。在一行中,我有一个白色背景色的linearLayout,所以当我做了你所说的,它改变了行的背景色,但我需要改变linearLayout的背景色。我该怎么做? – mohsen 2014-10-01 14:18:44

+0

@mohsen见下文 – XtreemDeveloper 2014-10-02 04:13:01

+0

我答案,我想这样的作品...的LinearLayout布局=(LinearLayout中)convertView.findViewById(R.id.your_linear_layout);然后将颜色设置为线性布局convertView.setBackgroundColor(Color.GRAY); – Rajesh 2014-10-02 04:43:01

3

你绘制名状态:

if(vip_flag) 
{ 
    holder.rl.setBackgroundResource(R.drawable.round_corner_vip); 
} 
else 
{ 
    holder.rl.setBackgroundResource(R.drawable.roundcorner); 
} 
// or put some more else-if conditions and set background according to conditions.