Android:为ListView适配器创建多维数组

时间:2011-12-02 21:24:15

标签: android

以下是我现在所拥有的:

private Object mainArray[] = {R.drawable.main_logo, "page_4"};
    private Object studioArray[] = {R.drawable.studio_logo, "page_5"};
    private Object gArray[] = {R.drawable.g_logo, "page_6"};
    private Object venues[] = {mainArray,studioArray,gArray};

我将场地数组对象传递给我的适配器,但是我无法获得对象的大小:venues.size();有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

看起来场地是一个对象数组,但它不包含对象,它包含对象数组。所以也许不是拥有一个对象数组,你应该让场地成为一组对象数组。

或许这样的事情?

private Object[] venues[] = {mainArray,studioArray,gArray};

我对这个答案并不十分自信,因为我是一名C ++程序员,但这是我首先要尝试的。我相信你可以使用像ArrayList这样更复杂的数据结构,它可以提供比仅仅数组更多的功能。

答案 1 :(得分:0)

由于您使用的是数组,因此应调用

venues.length 

而不是venues.size()

BUT:

  

就像@arasmussen在最后一行中说的那样,你可以使用更复杂的东西   数据结构也像ArrayList一样。

我不知道您的代码的上下文,但在这种情况下,正常的数组似乎有点笨拙。由于您创建了对象数组,因此您不知道数组中的内容(除了Objects)。我想你创建对象数组的唯一原因是你想要将int和字符串存储在一起。

Map更适合这类事物,因为它确实定义了您想要存储的对象类型,并且还确保您不能将其他对象放入其中。此外,当您需要在数组中搜索并提取或值时,Map将在以后提供更多功能......

我会建议这样的事情:

Map<Integer, String> main = new HashMap<Integer, String>();
main.put(R.drawable.main_logo, "page_4");

Map<Integer, String> studio = new HashMap<Integer, String>();
main.put(R.drawable.studio_logo, "page_5");

Map<Integer, String> gArray = new HashMap<Integer, String>();
main.put(R.drawable.g_logo, "page_6");

ArrayList<Map<Integer, String>> venues = new ArrayList<Map<Integer, String>>();
venues.add(main);
venues.add(studio);
venues.add(gArray);

尽管如此,这可能看起来像是一种矫枉过正。它确实为您提供了更多的灵活性。例如。你可以做这样的事情:

venues.size(); // Get the number of venues

for(Map<Integer, String> element : venues)
{
    if(element.containsKey(R.drawable.main_logo)){} // do something
    else if(element.containsValue("page 5")){} // do something else
}

虽然我可能会有点沮丧。但是我不喜欢创建对象数组,因为你不知道以后这些数组究竟是什么。