android — Как изменить стартовую активность динамически?" />

Как изменить стартовую активность динамически?

Я работаю над приложением для Android. Я хочу динамически изменить стартовую активность. Я имею в виду, что когда пользователь запускает приложение в первый раз, тогда начальная активность будет отличаться, а когда запускается во второй раз, начнется изменение активности. Это пропустит первые два действия и перейдет к третьему действию. Как я могу этого достичь.

14 голосов | спросил user2223286 29 MaramFri, 29 Mar 2013 09:14:51 +04002013-03-29T09:14:51+04:0009 2013, 09:14:51

6 ответов


0

Вы не можете изменить первое действие динамически, но вы можете создать прозрачное действие, подобное следующему:

<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();
ответил Mikalai Daronin 29 MaramFri, 29 Mar 2013 10:26:00 +04002013-03-29T10:26:00+04:0010 2013, 10:26:00
0

Вы можете использовать SharedPreference в соответствии с вашими требованиями.

вы можете сохранять и получать значения из этого Ссылка

Внутри каждого метода Oncreate() вашей активности вы можете проверить значение SharedPreference и начать свою деятельность там.

Надеюсь, это поможет вам.

ответил Bhavesh Patadiya 29 MaramFri, 29 Mar 2013 09:24:25 +04002013-03-29T09:24:25+04:0009 2013, 09:24:25
0

Используйте настройки для хранения значений (условий), которые вы хотите иметь. затем в соответствии с этим измените startActivity.

ответил itsrajesh4uguys 29 MaramFri, 29 Mar 2013 09:20:19 +04002013-03-29T09:20:19+04:0009 2013, 09:20:19
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);
ответил Poovizhirajan N 29 MaramFri, 29 Mar 2013 09:29:38 +04002013-03-29T09:29:38+04:0009 2013, 09:29:38
0

Независимо от того, что сначала откройте ваше приложение в основной деятельности. Тем временем используйте 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");
    }


}
ответил Jay Mayu 29 MaramFri, 29 Mar 2013 09:57:55 +04002013-03-29T09:57:55+04:0009 2013, 09:57:55
0

Нет необходимости, чтобы у Activity был файл макета. Вы можете проверить состояние в своей активности запуска и перенаправить на другую активность в зависимости от условия. (Переход от активности запуска к условной активности не будет виден).

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent;
if (condition) {
   intent = new Intent(this, FirstClass.class);
} else {
   intent = new Intent(this, SecondClass.class);
}
startActivity(intent);
finish();
// note we never called setContentView()
}

Другие действия (FirstClass /SecondClass):

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
ответил Abiranjan 26 Maypm17 2017, 12:07:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132