作業中の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);
しかし、何も機能しないようです。何か案は?
これは、アクティビティの名前を使用してアクティビティを開始できるコードです
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
というアクティビティ名がある場合、アクティビティの完全な名前A
はx.y.z.A
。
さらに良い方法(および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
私は解決策を認識していませんが、代替手段があります。divがWebページで非表示にして表示するのと同じような方法です。
s1s1がローコンテンツをロードする場合は、それらをlinearlayoutに配置し、フォームs1のロード時にそれらの可視性を維持します。 s1をクリックしてs1s1に到達すると、s1が非表示になり、visibilityのパラメーターが "visible"に設定されます。
これにより、個別のアクティビティの作成を回避でき、この方法でも簡単に戻ることができます。