1

社内で非公式の Android 開発グループを立ち上げました。それぞれ、半独立したアクティビティを 1 つのアプリに追加します。昨日ふざけて、これを「簡単」にするために思いついた最善の方法は、メイン アクティビティを GridView にし、開発者がハードコードされた配列の要素を介してメイン アクティビティにアクティビティを「登録」できるようにすることでした。アクションアイテム:

    private final ActionItem[] actionItems = {
        new ActionItem(R.drawable.dms_to_dd, "DMS to/from DD", DegreeConverter.class)
    };

ここで、ActionItem は次のとおりです。

public class ActionItem {

    private int drawingID;
    private String label;
    private java.lang.Class<?> activity;

    public ActionItem(int drawingID, String label, Class<?> activity) {
        this.drawingID = drawingID;
        this.label     = label;
        this.activity  = activity;
    }

    public int getDrawingID() {
        return drawingID;
    }
    public String getLabel() {
        return label;
    }
    public Class<?> getActivity() {
        return activity;
    }   
}

人々が始めるために、私は最初の単純な Activity/ActionItem を作成し、上記のように登録しました。

GridView 内の画像とラベリング用の文字列、そして最も重要なこととして、対応する GridView アイテムが選択されたときに Intent を介して起動されるクラスに、drawable が必要です。

これはすべて機能します。ただし、これを機能させるためにメインのアクティビティを編集する必要がなければいいと思います。GridView に値を設定する前に、テキスト ファイルから同じ情報 (ActionItem について) を読み取れることを期待していました。drawable id と String は問題ありません。そこで主な質問: テキスト ファイルでそのクラスを指定するにはどうすればよいでしょうか?

名前 (String/char[]) から java.lang.Class インスタンスを作成する方法はありますか? 上で説明したことを行うためのより良い方法はありますか?

役立つ場合は、さらに詳細をお知らせください。

4

2 に答える 2

0

あなたは試しましたか:

  Class.forName("com.something.MyClass")

http://developer.android.com/reference/java/lang/Class.html#forName(java.lang.String )

ファイルから名前を読み取り、forName メソッドで文字列を設定できます。

したがって、次のようなことができます。

  public ActionItem(int drawingID, String label, String activityClassName) {
    this.drawingID = drawingID;
    this.label     = label;
    this.activity  = Class.forName(activityClassName);
}
于 2012-07-13T00:31:15.053 に答える
0

以下の例では、リフレクションを使用しています。

Class theClass  = Class.forName("YourClass");
YourClass instancevariable = (YourClass)theClass.newInstance();
于 2012-07-13T00:31:27.163 に答える