1
  1. 私のListViewはバックグラウンドにあります(相対レイアウトを使用)。
  2. ListViewのビューとして使用されるテキストボックスがあります。これは、行ごとに異なる背景色に設定されています。これは、アダプタで次のコードを使用して実行されます。

    public View getView(int position, View convertView, ViewGroup parent)
    {
    
        View rowView = convertView;
    
        if (rowView == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            rowView = inflater.inflate(R.layout.listview_background, null);
            rowView.setTag(new ViewHolder((TextView) rowView.findViewById(R.id.listBackgroundTV)));
        }
    
        ((ViewHolder)rowView.getTag()).tv.setHeight((position != 0)?((CompareTextBox)((Activity)context).findViewById(R.id.ctb1)).getLineHeight():((CompareTextBox)((Activity)context).findViewById(R.id.ctb1)).getLineHeight() + (int) (context.getResources().getDisplayMetrics().density + 0.5f));
        ((ViewHolder)rowView.getTag()).tv.setBackgroundColor((b[position])?0xff000000:0xffffffff);
    
        return rowView;
    }
    

したがって、テキストボックスの背景色が位置を使用して設定されていることがわかります。

  1. ここで、ListView.scrollTo(x、y)関数を使用して、ListViewを上方向にスクロールします。
  2. これで、テキストボックスの背景が位置から計算されるため、ListViewを上にスクロールすると、表示される新しい行に対してテキストボックスの正しい色が表示されます。しかし、これは起こっていません。上にスクロールしたために表示されたListViewのすべてのアイテムは、同じ黒い背景になります。

何かアイデア、ListViewビューを更新/再描画する方法、または上記のコードで発見された問題はありますか?

4

1 に答える 1

1

アダプターのメソッドListViewへの呼び出しで更新できます。ビュー アイテムを更新するために基になるデータセットが変更された場合、通常は呼び出される必要がありますが、notifyDataSetChanged()後で呼び出すこともできます。scrollTo

于 2013-02-10T14:58:15.280 に答える