2

MyListView看起来很棒,它正在从服务器加载新闻并将它们放在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);
            }

        }
4

1 回答 1

1

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

您只需要else在代码中添加一条语句并明确设置每行的默认颜色。

 if(position == 0)
      rl.setBackgroundColor(Color.parseColor("#f0f0f0"));
 else
      rl.setBackgroundColor(/*Default Color*/);
于 2013-03-22T23:40:12.363 回答