以下是我现在所拥有的:
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();有没有更好的方法呢?
答案 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
}
虽然我可能会有点沮丧。但是我不喜欢创建对象数组,因为你不知道以后这些数组究竟是什么。