web-dev-qa-db-ja.com

文字列でクラス名を使用して新しいAndroid=アクティビティを開始するにはどうすればよいですか?

作業中のAndroidアプリケーションに問題があります。

私のアプリケーションにはいくつかのセクションがあり、読み込まれる次の画面は文字列に基づいています。したがって、セクション1の画面1はS1S1になります。

私の質問は、文字列に基づいてアクティビティをどのように開始できるかです。 S1S1を文字列で保存しました。次のアクティビティと呼びましょう。 S1S1.classと入力するのではなく、文字列から取得する必要があります。私は思いつく限りのことをすべて試しましたが、グーグルはあまり役に立ちませんでした。

私が試したいくつかのことは

Intent myIntent = new Intent(nextactivity);
Intent myIntent = new Intent(v.getContext(), getClass().getName().valueOf(nextactivity));
Intent myIntent = new Intent(v.getContext(), Class.forName(nextactivity));

と実行してみました

startActivityForResult(myIntent, 0); 

しかし、何も機能しないようです。何か案は?

34
fahadayaz

これは、アクティビティの名前を使用してアクティビティを開始できるコードです

String activityToStart = "com.example.MainActivity";
try {
    Class<?> c = Class.forName(activityToStart);
    Intent intent = new Intent(this, c);
    startActivity(intent);
} catch (ClassNotFoundException ignored) {
}

[〜#〜]編集[〜#〜]

ここでクラス名は、パッケージ名を含むクラスの完全な名前になります。たとえば、パッケージ名がx.y.zおよびAというアクティビティ名がある場合、アクティビティの完全な名前Ax.y.z.A

76
Dharmendra

さらに良い方法(およびAOSPにバンドルされていない他のアプリと一緒にBrowser.apkを起動するためにシステムで使用される方法):

Intent intent = new Intent();
intent.setClassName("com.Android.browser","com.Android.BrowserActivity");

context.startActivity(intent);

または、コマンドラインからActivityを開始できることを確認する場合は、シェルから次のように実行できます。

adb Shell
am start com.Android.browser/.BrowserActivity
33

私は解決策を認識していませんが、代替手段があります。divがWebページで非表示にして表示するのと同じような方法です。

s1s1がローコンテンツをロードする場合は、それらをlinearlayoutに配置し、フォームs1のロード時にそれらの可視性を維持します。 s1をクリックしてs1s1に到達すると、s1が非表示になり、visibilityのパラメーターが "visible"に設定されます。

これにより、個別のアクティビティの作成を回避でき、この方法でも簡単に戻ることができます。

0
Jana