1

非リスト要素 (つまり、ListView を使用しない) にアダプタを追加することは可能ですか?

たとえば、連続して 3 枚の画像を表示したい LinearLayout があります。ここで、ArrayList の内容が変更されたときにビューを変更したいと考えています。ListView 以外の setAdapter メソッドが見つかりませんでした...しかし、水平または斜めのリストなど、Listview を使用したくない場合があるかもしれません。

4

1 に答える 1

0

この動作は、カスタム クラスで模倣するのが難しいようには見えません。何かのようなもの:

public class UpdatingArray { // or whatever
    private Something[] myArray; // or a list or whatever generic you like
    private mUpdateListener;

    public UpdatingArray(Something[] array){
        myArray = array;
    }

    public void replace(Something something, int index){
        myArray[index] = something;
        update();
    }

    public Something del1stAddLast(Something something){
        Something first = myArray[0];
        for(int i = 0; i < myArray.length - 1; i++){
            myArray[i] = myArray[i+1];
        }
        myArray[myArray.length - 1] = something;
        update();
        return something; // in case you want it
    }

    // getter(s), if you want them...

    public static abstract class UpdateListener{
        public abstract void onUpdate(Something[] array);
    }

    public void setUpdateListener(UpdateListener) {
        mUpdateListener = listener;
    }

    private void update(){
        this.update(myArray);
    }

    public void update(Something[] array){
        mUpdateListener.onUpdate(array);
    }
}

したがって、ビューで:

public class CustomView extends View implements UpdateListener {
    UpdatingArray uArray;
    Something[] sArray;

    public CustomView(Context context, Something[] array){
        super(context);
        sArray = array;
        uArray = new UpdatingArray(sArray);
        uArray.setUpdateListener(this);
    }

    @Override
    public void onUpdate(Something[] array){
        sArray = array;
        invalidate();
    }

    @Override
    public void onDraw(Canvas canvas){
       // draw your images based on what's in sArray
    }
}

ご不明な点がございましたら、お知らせください。明らかに、これの一部は疑似コードです。

一方、いつでもこれを拡張できます: http://developer.android.com/reference/android/widget/AbsListView.html

または、描画されていない非公開の ListView をカスタム ビューに配置し、そのメソッドを使用します (継承に対する合成など)。

于 2013-01-27T04:18:31.107 に答える