3

我又迷路了。我的对象如下:

public class LogInfo implements Serializable{


public ArrayList<Point[][]> strokes;
public LinkedList<byte[]> codes;
public int[] times;

...
}

首先,我从这个对象的 ArrayList 填充 ListView。然后我从 ListView 中选择一个对象,我想用字段填充新片段中的新列表

public ArrayList<Point[][]> strokes;
public LinkedList<byte[]> codes;

但是,要创建一个 ArrayAdapter 我不能只将一个对象传递给它(据我所知)。我需要传递一个数组。问题是,我想传递一个先前创建和选择的对象,然后从它的字段中填充列表(不仅是笔划或代码,而且两者都是)。

我的 ObjectAdapter 类应该是什么样子,它应该扩展什么类?要从我使用的对象的 ArrayList 中选择一个对象:

public class LogInfoObjectAdapter extends ArrayAdapter<LogInfo>

示例(现实生活):

我有很多车停在停车场,我需要列出它们,所以我使用 ArrayAdapter 来填充列表。在我从列表(汽车对象)中选择一辆车后,它有两个数组(例如破碎的灯泡和破碎的轮胎,但两个数组的大小相同)。现在我想将包含所选汽车信息的新列表。我希望它足够清楚。我的问题是要使用 ArrayAdapter 我必须在构造函数中传递一个数组,但我想传递整个对象并在我的适配器类中处理它并将选择的字段添加到 ListView

4

2 回答 2

1

如果您有一个包含多个列表的对象,则不需要扩展ArrayAdapter,您只需扩展BaseAdapter并实现所需的方法(getCount()、、getView()等)。

public class Adapter extends BaseAdapter {

class LogInfo implements Serializable {


    public ArrayList<Point[][]> strokes;
    public LinkedList<byte[]> codes;
    public int[] times;
}

private LogInfo mInfo;
public Adapter(LogInfo info) {
    mInfo = info;
}



@Override
public int getCount() {
    if (mInfo != null && mInfo.strokes != null) {
    return mInfo.strokes.size();
    }
    return 0;
}

@Override
public Object getItem(int i) {
    return null;
}

@Override
public long getItemId(int i) {
    return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    if (mInfo != null) {
    Point[][] p = mInfo.strokes.get(i);
    byte[] b = mInfo.codes.get(i);
    //create the view
    }
    return null;
}

}

于 2013-05-20T10:29:13.540 回答
0

1) 数组适配器有方法 getItem() 您可以使用它通过索引获取特定项。2)让你的LogInfo实现IIterable接口 http://developer.android.com/reference/java/lang/Iterable.html

public class LogInfo implements Serializable, Iterable<Point[][]>{


public ArrayList<Point[][]> strokes;
public LinkedList<byte[]> codes;
public int[] times;

public abstract Iterator<Point[][]> iterator (){

//Iterator implementation

}

现在您可以直接在具有以下签名的其他列表中使用此对象

public class LogInfoObjectAdapter extends ArrayAdapter<Point[][]>
于 2013-05-20T10:32:27.437 回答