非リスト要素 (つまり、ListView を使用しない) にアダプタを追加することは可能ですか?
たとえば、連続して 3 枚の画像を表示したい LinearLayout があります。ここで、ArrayList の内容が変更されたときにビューを変更したいと考えています。ListView 以外の setAdapter メソッドが見つかりませんでした...しかし、水平または斜めのリストなど、Listview を使用したくない場合があるかもしれません。
非リスト要素 (つまり、ListView を使用しない) にアダプタを追加することは可能ですか?
たとえば、連続して 3 枚の画像を表示したい LinearLayout があります。ここで、ArrayList の内容が変更されたときにビューを変更したいと考えています。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);
}
}
したがって、ビューで:
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 をカスタム ビューに配置し、そのメソッドを使用します (継承に対する合成など)。