2011-03-06 81 views
0

我在Android开发站点找到了以下文档,该文档用于创建具有硬编码元素的AlertDialog:http://developer.android.com/guide/topics/ui/dialogs.html#AddingAList使用在运行时生成的元素创建AlertDialog

如果你可以对它们进行硬编码,那么它工作正常。但是,在我的应用程序中,当需要第一次请求对话框时,我需要在运行时生成项目(在生成之前,我甚至不知道项目列表的长度)。

如何在运行时使用生成的列表,而不是在AlertDialog中的项目中使用final CharSequence[]

感谢

回答

7
  1. 变量需要final只有当你从访问它的内部类(OnClickListener在这种情况下)。你需要访问内部类中的项目列表吗?

  2. final只意味着引用不能改变(=变量总是指向相同的对象)。它没有说明如何创建对象。您可以轻松地做到:

    List<String> strings = new ArrayList<String>(); 
    strings.add("Red"); 
    strings.add("Green"); 
    strings.add("Blue"); 
    
    final CharSequence[] items = strings.toArray(new String[strings.size()]); 
    
+0

我明白了,我是一个习惯于C++的Java初学者,所以我并不真正知道'final'的含义。感谢您清除这个问题,这完美地工作。 – houbysoft 2011-03-11 02:20:27

+0

我的代码预测是完全减少...这样的通用代码完整谢谢@Peter knego – 2016-02-08 12:03:50

0

HMN我还没有尝试过,但不是使用类成员

final CharSequence[] items = {"Red", "Green", "Blue"}; 

刚刚创建和使用您创建的警报的方法的项目[]。内部类可以访问方法afaik的最终变量。

+0

能否请您阐述一下“只是创建和使用”?同样,我需要一种动态创建CharSequence []的方法,最好不知道项目列表的长度。那可能吗? – houbysoft 2011-03-06 20:49:57

+0

哦,对了,最后阵列和动态initalizing ..这应该工作,但看起来丑陋。它的日食生成在“toArray-> complete”上:'List itemList = new ArrayList ();''final CharSequence [] items =(CharSequence [])itemList.toArray(new CharSequence [itemList.size()]) ;' – icyerasor 2011-03-06 20:55:04