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
颜色的,那是因为它是第一个回收的
视图
,又称第四个
视图
,是在第一个
视图
离开屏幕后添加的,因此第四行重用了第一行(而不是创建一个新的),因此,回收的
视图
在第一行显示了您为其设置的颜色。有道理?