我的ListView
看起来很棒,它正在从服务器加载新闻并将它们放在ListView
中。所以我想做的就是制作另一种颜色的最新款,但是检查不起作用:if(position==0)
因为不仅仅 第一项正在使用布局修改为我选择的颜色,但第三项也改变了布局。我不知道为什么第3次。以下是我的代码:
class simpleadapter extends SimpleAdapter
{
public simpleadapter(Context context, List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final View view = super.getView(position, convertView, parent);
//final TextView tvTitle = (TextView)view.findViewById(R.id.tvTitle);
//final TextView tvContent = (TextView)view.findViewById(R.id.tvContent);
final RelativeLayout rl = (RelativeLayout)view.findViewById(R.id.rl);
if(position == 0)
rl.setBackgroundColor(Color.parseColor("#f0f0f0"));//here 'im changing the layout
holding the item in another color.
rl.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
/* tvTitle.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//Log.i(JohnMain,"Click on the Textview! Congrats!!!");
Toast.makeText(MainActivity.this, "Congrats!", Toast.LENGTH_LONG).show();
}
});
*/
return view;
// return super.getView(position, convertView, parent);
}
}
答案 0 :(得分:1)
这是因为ListView
在滚动屏幕(并且未被使用)之后回收它们的行View
。因此,如果您设置一行View
的颜色,然后滚动屏幕并进行回收,它仍然会显示您之前设置的颜色,即使它现在位于不同的位置。一般的经验法则是明确设置行View
的每个属性都已更改。
您只需在代码中使用else
语句,并明确设置每行的默认颜色。
if(position == 0)
rl.setBackgroundColor(Color.parseColor("#f0f0f0"));
else
rl.setBackgroundColor(/*Default Color*/);