2011-08-12 10 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 []デモを宣言している行に警告が表示され、ジェネリックを使用する必要があります。しかし、それを 'Class [] demos = {...};に変更すると、「クラス *のジェネリックアレイを作成できません。 – Tomas

+0

興味深い点。ちょっと探して、このスレッドhttp://stackoverflow.com/questions/749425/how-do-i-use-generics-with-an-array-of-classesを見つけました。しかし、あなたのケースでは、 '@SuppressWarnings(" rawtypes ")を使用します。これは、実際のクラスがあらかじめ定義されていて、' Activity'にキャストされないためです。 – ernazm

関連する問題