Запустите приложение для Android с определенной активностью - PullRequest
5 голосов
/ 03 ноября 2011

Когда приложение запускается или возобновляется, я хотел бы перенаправить пользователя к определенной «Деятельности» на основе переменной, установленной в «SharedPrefences».

Чтобы сделать это, я рассматривал возможность использования метода, который проверяетдля переменной состояния SharedPreferences и перенаправляет на правильное действие:

private void launchRedirect(Context ctxt) {

    Integer status = AppPreferences.getStatus(this);
    Intent i =  new Intent(MainActivity.this, Activity1.class);

    switch (status) {
    case 0:
        i =  new Intent(MainActivity.this, Activity2.class);
    case 1:
        i =  new Intent(MainActivity.this, Activity3.class);
    case 2:
        i =  new Intent(MainActivity.this, Activity4.class);
    case 3:
        i =  new Intent(MainActivity.this, Activity5.class);    
    }
    startActivity(i);
}

И затем я мог бы вызывать этот метод в каждом методе 'onResume' для каждого действия в моем приложении:

    public void onResume(Bundle savedInstanceState) {
    launchRedirect(this);
}

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

Я предполагаю, что это может привестик некоторым круглым ошибкам - есть ли лучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 03 ноября 2011

Я считаю, что это нормальный способ сделать это, за исключением того, что вы также можете добавить вызов метода finish (), если вам необходимо закрыть MainActivity в этой ситуации.

Кроме того, не забывайте операторы break:

private void launchRedirect(Context ctxt) {

  Integer status = AppPreferences.getStatus(this);
  Intent i =  new Intent(MainActivity.this, Activity1.class);

  switch (status) {
  case 0:
    i =  new Intent(MainActivity.this, Activity2.class);
    break;
  case 1:
    i =  new Intent(MainActivity.this, Activity3.class);
    break;
  case 2:
    i =  new Intent(MainActivity.this, Activity4.class);
    break;
  case 3:
    i =  new Intent(MainActivity.this, Activity5.class);  
    break;  
  }
  startActivity(i);
  if (/* check if MainActivity should be closed */) {
    finish();
  }
}
1 голос
/ 03 ноября 2011

Пожалуйста, убедитесь, что вы обновляете значение предпочтения в соответствии с вашей навигационной активностью.Это сохранит ваши ненужные чеки для запуска Активности.

...