Android 检查项目';s在自定义ListView中的位置由SimpleAdapter创建
我的Android 检查项目';s在自定义ListView中的位置由SimpleAdapter创建,android,Android,我的ListView看起来很棒,它从服务器加载新闻并将它们放在ListView中。因此,我想做的就是用另一种颜色制作最新的新版本,但检查:if(position==0),这是行不通的,因为不仅第一个项目将版面修改为我选择的颜色,而且第三个项目也将版面更改。我不知道为什么是3号。下面是我的代码: class simpleadapter extends SimpleAdapter { public simpleadapter(Context context
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);
}
}
类simpledapter扩展了simpledapter
{
公共simpleadapter(上下文,列表>数据,
int资源,字符串[]从,int[]到){
超级(上下文、数据、资源、从、到);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
最终视图=super.getView(位置、转换视图、父视图);
//final TextView tvTitle=(TextView)view.findViewById(R.id.tvTitle);
//final TextView tvContent=(TextView)view.findviewbyd(R.id.tvContent);
final RelativeLayout rl=(RelativeLayout)view.findViewById(R.id.rl);
如果(位置==0)
rl.setBackgroundColor(Color.parseColor(#f0”);//这里我正在更改布局
用另一种颜色拿着物品。
setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
//TODO自动生成的方法存根
}
});
/*setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
//Log.i(约翰曼,“点击文本视图!恭喜!!!”;
Toast.makeText(MainActivity.this,“恭喜!”,Toast.LENGTH_LONG.show();
}
});
*/
返回视图;
//返回super.getView(position、convertView、parent);
}
}
这是因为ListView
s在它们滚动出屏幕(并且没有被使用)后,会回收它们的行View
s。因此,如果您设置一行的视图的颜色,然后它滚动到屏幕外并被回收,它仍然会显示您之前设置的颜色,即使现在它处于不同的位置。一般的经验法则是显式设置行的视图
中更改的每个属性
您只需要在代码中使用else
语句,并显式设置每行的默认颜色
if(position == 0)
rl.setBackgroundColor(Color.parseColor("#f0f0f0"));
else
rl.setBackgroundColor(/*Default Color*/);
非常感谢。你的解决方案解决了我的问题!我想澄清的是,我的第4个项目的颜色与第3个项目的颜色相同。所以我应该编辑我的问题。你知道为什么第四项而不是第二项的布局颜色与第一项相似吗?如果我的解决方案对你有效,请随意将其标记为已接受的答案。另外,如果第四行是您看到的第一个具有#f0f0
颜色的,那是因为它是第一个回收的视图
,又称第四个视图
,是在第一个视图
离开屏幕后添加的,因此第四行重用了第一行(而不是创建一个新的),因此,回收的视图
在第一行显示了您为其设置的颜色。有道理?