ArrayAdapter用于Android中的自定义布局?

时间:2013-01-27 02:04:31

标签: java android android-listview android-arrayadapter

是否可以将适配器添加到非列表元素(即不使用ListView)?

例如,我有一个LinearLayout,我想连续3张图像。现在我想在ArrayList内容更改时更改视图。除了ListView之外,我找不到其他任何东西的setAdapter方法......但是有些情况下我可能不想使用Listview,例如水平或对角线列表。

1 个答案:

答案 0 :(得分: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并使用其方法(合成而不是继承)。