17

私はアンドロイドアプリに取り組んでいます。Start アクティビティを動的に変更したい。つまり、ユーザーが最初にアプリを起動するとアクティビティが開始され、2 回目に開始するとアクティビティが変更されます。これにより、最初の 2 つのアクティビティがスキップされ、3 番目のアクティビティに移動します。どうすればこれを達成できますか。

4

7 に答える 7

37

最初のアクティビティを動的に変更することはできませんが、次のような透過的なアクティビティを作成できます。

<activity
    android:name=".ActivityLauncher"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

onCreateメソッドで次のアクティビティを選択します。

if ( logged() ) {
    intent = new Intent(this,MainActivity.class);
} else {
    intent = new Intent(this,SignInActivity.class);
}
startActivity(intent);
finish();
于 2013-03-29T06:26:00.613 に答える
1

要件に応じてSharedPreferenceを使用できます。

このリンクから値を保存および取得できます

アクティビティの各Oncreate()メソッド内で、SharedPreference 値を確認し、そこでアクティビティを開始できます。

それがあなたを助けることを願っています。

于 2013-03-29T05:24:25.057 に答える
0

設定を使用して、必要な値(条件)を保存します。それに従って startActivity を変更します。

于 2013-03-29T05:20:19.513 に答える
0

これは、ユーザーがログイン画面で [ Remember Me]チェック ボックスをオンにしたときに行うことです。

値をSharedPreferenceファイルに保存するには:

Activity最初に1回、2番目に1回、このようなことをする必要がありますActivity

sharedPrefs = getApplicationContext().getSharedPreferences(PRIVATE_PREF, Context.MODE_PRIVATE);

// EDITOR INSTANCE TO SAVE THE NAG SETTING
editor = sharedPrefs.edit();

// GET THE NAG SETTING CHECKBOX
if (chkbxNagSetting.isChecked())    {

    editor.putBoolean(NAG_SETTING, true);
} else {
    editor.putBoolean(NAG_SETTING, false);
}

editor.commit();

SharedPreferenceファイルから値を取得するには:

boolean blNagSetting = sharedPrefs.getBoolean(NAG_SETTING, false);

if (blNagSetting == true)   {
    Intent startMainPage = new Intent(SignIn.this, SplashScreen.class);
    startMainPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(startMainPage);
    finish();
}

そして、これらはで使用される必要なグローバル変数/インスタンスですActivity:

SharedPreferences sharedPrefs;
Editor editor;
private static final String PRIVATE_PREF = "CHANGE_TO_SOME_FILE_NAME";
private static final String NAG_SETTING = "nag_setting";

スキップ 2 を考慮して、コードを少し変更する必要がありますActivities

助けが必要な場合はお知らせください。

于 2013-03-29T05:32:59.053 に答える
0

初めてログインしたかどうかにsharedpreferenceを使用する

  if (!checkNameInfo()) {
//first time
                    FirstActivity();
                } else {
//second time
                    Intent i = new Intent(first.this, second.class);
                    startActivity(i);
                    finish();
                }

値を確認する

private final boolean checkNameInfo() {
        boolean role = mPreferences.contains("Name");
        if (role) {
            return true;
        }
        return false;
    }

IN firstActivity

SharedPreferences.Editor editor = mPreferences.edit();
                editor.putString("Name", edt.getText().toString()); 
editor.commit();
Intent i = new Intent(first.this, second.class);
                        startActivity(i);
于 2013-03-29T05:29:38.600 に答える
-1

メイン アクティビティでアプリを最初に開いても構いません。一方、SharedPreferenceを使用して、アプリをロードした回数に関するデータを保存します。

あなたはあなたの中で以下のように何かをしなければならないでしょう

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String dataAvailable;
    SharedPreferences prefs = getSharedPreferences("countPref", Context.MODE_PRIVATE);
    dataAvailable = prefs.getString("dataAvailable", null);

    //checking whether launching for the first time.
    if(dataAvailable!=null){
         int appLoadedCount = prefs.getInt("appLoadedCount", -1);
         appLoadedCount++;
         prefs.edit().putInt("appLoadedCount", appLoadedCount).commit();

         // Check how many times loaded
         if(appLoadedCount==0){
             Intent firstAct = new Intent(MainActivity.this, FirstActivity.class);
             startActivity(firstAct);
         }
         else if(appLoadedCount==1){
             Intent scndAct = new Intent(MainActivity.this, ScndActivity.class);
             startActivity(scndAct);
         }
         else if(appLoadedCount==2){
             Intent thirAct = new Intent(MainActivity.this, ThirdActivity.class);
             startActivity(thirAct);
         }
         else{
             Intent thirAct = new Intent(MainActivity.this, ThirdActivity.class);
             startActivity(thirAct);
         }

         Log.v("avilable", dataAvailable);
         Log.v("avilable", String.valueOf(appLoadedCount));
    }
    else{
         //loading first time
         prefs.edit().putString("dataAvailable", "yeap").commit();
         //setting the count to 1 as loaded for the firs time
         prefs.edit().putInt("appLoadedCount", 0).commit();
         Log.v("Not avilable", "Loaded first time");
    }


}
于 2013-03-29T05:57:55.443 に答える