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])
クラスタイプを使用するのが悪いことではないかどうかは分かりませんでした。また、Classが生の型であると言うClass []デモを宣言している行に警告が表示され、ジェネリックを使用する必要があります。しかし、それを 'Class [] demos = {...};に変更すると、「クラス *のジェネリックアレイを作成できません。 –
Tomas
興味深い点。ちょっと探して、このスレッドhttp://stackoverflow.com/questions/749425/how-do-i-use-generics-with-an-array-of-classesを見つけました。しかし、あなたのケースでは、 '@SuppressWarnings(" rawtypes ")を使用します。これは、実際のクラスがあらかじめ定義されていて、' Activity'にキャストされないためです。 – ernazm