检查我在使用SimpleAdapter制作的自定义ListView中的项目位置

时间:2013-03-22 23:19:08

标签: android

我的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);
            }

        }

1 个答案:

答案 0 :(得分:1)

这是因为ListView在滚动屏幕(并且未被使用)之后回收它们的行View。因此,如果您设置一行View的颜色,然后滚动屏幕并进行回收,它仍然会显示您之前设置的颜色,即使它现在位于不同的位置。一般的经验法则是明确设置行View的每个属性都已更改。

您只需在代码中使用else语句,并明确设置每行的默认颜色。

 if(position == 0)
      rl.setBackgroundColor(Color.parseColor("#f0f0f0"));
 else
      rl.setBackgroundColor(/*Default Color*/);