如何动态更改启动 Activity?

18

我正在开发一款Android应用程序。我想动态更改启动活动。也就是说,当用户第一次启动应用程序时,启动活动将不同,而当再次启动应用程序时,启动活动将改变。这将跳过前两个活动并移动到第三个活动。我该如何实现这一点。

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();

需要布局吗? - Vignesh VRT
如果您正在使用AppCompatActivity,那么请将您的SplashScreen扩展到Activity而不是AppCompatActivity。谢谢@MehdiJahedManesh - iamkdblue

2

并不是每个Activity都必须有一个布局文件。您可以在启动器Activity中进行条件检查,并根据条件重定向到其他Activity。(尽管从启动器Activity到条件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()
}

其他活动(一级 / 二级):

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

没有布局的活动是个绝妙的想法。 - ilkayaktas

1
你可以根据需求使用SharedPreference
你可以将值存储和检索到链接中。
在每个Activity的Oncreate()方法中,您可以检查SharedPreference的值并在那里启动Activity。
希望它能帮助你。

0
使用偏好设置来存储您想要的值(条件),然后根据此更改startActivity。

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;
    }

在第一个活动中

SharedPreferences.Editor editor = mPreferences.edit();
                editor.putString("Name", edt.getText().toString()); 
editor.commit();
Intent i = new Intent(first.this, second.class);
                        startActivity(i);

0

当用户在登录界面上选择了“记住我”复选框时,这就是我所做的。

要将值保存到SharedPreference文件中:

您需要在第一个Activity和第二个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

如果您需要任何帮助,请告诉我。


-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");
    }


}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接