gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:53:33 30 4
gpt4 key购买 nike

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

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

最佳答案

使用自定义类来模仿这种行为似乎并不困难。类似于:

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);
}
}

那么在 View 中:

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

或者在自定义 View 中放置一个私有(private)的、未绘制的 ListView 并使用它的方法(组合优于继承等)。

关于java - Android 中用于自定义布局的 ArrayAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14543728/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com