【问题标题】:Best way to store list of activities to be called from another activity存储要从另一个活动调用的活动列表的最佳方式
【发布时间】:2011-08-12 22:14:04
【问题描述】:

我有以下目标:从扩展 ListActivity 的主要活动列表中,我想开始其他活动。

这是主要活动的代码:

public class SelectionWidgetsExampleActivity extends ListActivity {

    private Class[] demos = {ListViewDemo.class, ChecklistDemo.class};
    private ArrayAdapter<Class> aa;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        aa = new ArrayAdapter<Class>(this, android.R.layout.simple_list_item_1, demos);
        setListAdapter(aa);
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        Intent intent = new Intent(this, demos[position]);
        startActivity(intent);
    }
}

我的问题是

您将如何解决在主活动代码之外执行的类列表的问题?

我的第一个想法是将它作为字符串数组放入 xml 资源文件中。然后我可以轻松地从资源中创建字符串数组,但不知道如何将字符串转换为类 - 我需要类似:

    SomeJavaClass.getMeClassFromString(demos[position])

【问题讨论】:

    标签: java android


    【解决方案1】:

    你需要Class#forName(String className)吗? 它将解决您的问题。
    但是您最初的(发布的)解决方案有什么问题?我宁愿保留它也不愿使用动态类加载,只会将 demos 的修饰符更改为 private static final

    【讨论】:

    • 我只是不确定使用 Class 类型是否是一种不好的做法。此外,我在声明 Class[] demos 的行中收到警告,说 Class 是原始类型,我应该使用泛型。但是,当我将其更改为 Class&lt;Activity&gt;[] demos = {...}; 时,我收到一条错误消息 Cannot create generic array of Class.
    • 有趣的地方。搜索了一下,发现这个线程stackoverflow.com/questions/749425/…。但是,在您的情况下,我会使用 @SuppressWarnings("rawtypes"),因为您不关心实际的类,因为它们将被预定义,甚至不会被转换为 Activity
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多