2

ListViewサーバーからニュースを読み込んでListView. したがって、私がやりたかったのは、別の色で最新の新しいものを作成することですが、チェックしても機能しif(position==0)ませ。最初のアイテムだけでなく、選択した色にレイアウトが変更されているため、3番目のアイテムもレイアウトが変更されています なぜ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

これは、画面からスクロールした後(使用されていない場合)にListView行をリサイクルするためです。Viewしたがって、1つの行の色を設定したView後、画面外にスクロールしてリサイクルすると、現在は別の位置にありますが、以前に設定した色が表示されます。一般的な経験則では、View変更される行のすべてのプロパティを明示的に設定します。

コードにステートメントが必要であり、else各行のデフォルトの色を明示的に設定する必要があります。

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