0

私はリストリストビューととても混乱しています。リストに最後に追加された行に特定の色を追加したいのですが、どうすればよいですか?私は2日間すべてのインターネットとstackoverflowをグーグルで検索しましたが、どうすればわかりませんか?

私が試してみました

lv.getChildAt(lv.getLastVisiblePosition()). setBackgroundColor(Color.RED);

しかし、これまでのところ成功はありません。randowmの列に色を付けます。ただし、最後に追加したアイテムにのみ色を付けたいと思います。

誰かがそれについて私にアドバイスしてもらえますか?

コメントをいただければ幸いです。

乾杯

4

3 に答える 3

4

アダプターには効率上の理由からビューリサイクラーがあるため、これが「ランダム性」の原因です...
とにかく、追加された最後の行のインデックスを追跡するカスタムアダプターを作成しgetView()、現在のインデックスがこの最後のインデックスと一致するかどうかを確認します。

  • その場合は、背景色を変更してください
  • そうでない場合は 、元の背景色を復元します。

AndroidのRomainGuyがGoogleTalksでビューリサイクラーについて説明するのをご覧ください。


ArrayAdapterを拡張する例を次に示します。

public class MyArrayAdapter<T> extends ArrayAdapter<T> {
    private int lastAdded;
    public MyArrayAdapter(Context context, int textViewResourceId, List<T> objects) {
        super(context, textViewResourceId, objects);
        lastAdded = objects.size() - 1;
    }

    @Override
    public void add(T object) {
        lastAdded = getCount();
        super.add(object);
    };

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        if(position == lastAdded) // Red 
            view.setBackgroundColor(0xffff0000);
        else // Transparent
            view.setBackgroundColor(0x00000000);
        return view;
    }

    @Override
    public void insert(T object, int index) {
        lastAdded = index;
        super.insert(object, index);
    };
}

注:これは包括的ではありません。アダプターの使用方法に応じて、オーバーライドする場合としない場合があるデータを追加する方法は他にもあります。

于 2012-11-08T17:09:57.503 に答える
0

その呼び出しlv.getChildAt(lv.getLastVisiblePosition())で、表示され、現在画面に表示されている最後の子を取得します。

リストの最後の項目の何かを変更したい場合getViewは、アダプターの内部でチェックして、そこで何かをif(position == getCount()-1){ }行う必要があります。

于 2012-11-08T17:18:30.607 に答える
0

これにはcustomadapterを使用でき、getView()をオーバーライドすると、タスクを実行するのに役立ちます。

public View getView (int position, View convertView, ViewGroup parent){

  // some task
   if(position == last) // once even try position == getCount() 
      {
      set background color to the view
      }
    return convertView;
}

ここで最後は、リストビューに拡張する最後の項目です(配列リスト、配列、または要件に合った他の項目の場合があります)

于 2012-11-08T17:24:58.297 に答える