2011-08-12 71 views
3

我有以下目標:從擴展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]) 

回答

1

你需要Class#forName(String className)? 它會解決你的問題。
但是,您最初的(發佈的)解決方案有什麼問題?我寧願保留它,而不是使用動態類加載,只會將demos的修飾符更改爲private static final

+0

我只是不確定是否使用Class類型不是一些不好的做法。此外,我在我聲明'Class []演示'說類是原始類型,我應該使用泛型的行中得到一個警告。但是,當我將其更改爲'類 [] demos = {...};'我得到一個錯誤,說*無法創建類 *的通用數組。 – Tomas

+0

有趣的一點。搜索了一下,發現這個線程http://stackoverflow.com/questions/749425/how-do-i-use-generics-with-an-array-of-classes。然而,在你的情況下,我會使用'@SuppressWarnings(「rawtypes」)',因爲你不關心實際的類,因爲它們將被預定義,甚至不會被轉換成'Activity'。 – ernazm

相關問題