【问题标题】:Having more than one Launcher Activity拥有多个 Launcher Activity
【发布时间】:2018-08-31 09:36:01
【问题描述】:

我正在开发一个可以读取汽车数据的应用程序。
当用户第一次打开它时,他必须选择他驾驶的汽车(这是在 MainActivity 中)。
我想要做的是,用户在打开应用程序时不能总是选择他的车。
用户选车一次后,App应该直接去他的车的汽车数据Activity。
你能给我一些想法吗?

我已经在 AndroidManifest 中写到 MainActivity 和这个 Car Data Activity 是 Launcher Activity 但我认为它不会起作用,因为应用程序应该如何知道应该启动哪个 Activity。
请帮帮我!

【问题讨论】:

  • 您的应用必须只有一个启动器活动。您可以做的是将所选汽车保存在应用程序的共享偏好中。当主要活动开始时,您检查首选项。如果有保存的汽车,你会自动启动第二个活动,否则你会询问用户想要选择哪辆车
  • 您需要为其使用 Sharepreference。并且在上面的 setCONntentVew 方法之后,您需要在您的午餐活动中使用意图

标签: android android-activity android-manifest android-launcher start-activity


【解决方案1】:

您可以在此过程中使用 SharedPreference

SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(YourLaunchActivity.this);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean("isCarSet", true);
editor.apply();

然后检查每次启动活动

if (sharedpreferences.getBoolean("isCarSet", false)) {
    Intent i =new Intent(YourLaunchActivity.this,SecondActivty.class);
    startActivity(i);
    finish();
    }

我建议你使用共享偏好。

【讨论】:

    【解决方案2】:

    因此,在这种情况下,您可以使用Shared Preferences。在共享偏好中注册数据后,每次启动应用时都会从共享偏好中读取数据并直接转到所需的页面。

    共享偏好的示例代码:

    在 Preference 中设置值:

    SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
     editor.putString("name", "Elena");
     editor.putInt("idName", 12);
     editor.apply();
    

    从偏好中检索数据:

    SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
    String restoredText = prefs.getString("text", null);
    if (restoredText != null) {
      String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
      int idName = prefs.getInt("idName", 0); //0 is the default value.
    }
    

    更多帮助:https://developer.android.com/guide/topics/data/data-storage#pref

    另一种方法是使用会话,但处于初期阶段,我建议您使用共享偏好。

    【讨论】:

      【解决方案3】:

      您应该创建两个活动:
      - 显示汽车数据的 MainActivity(在清单中标记为启动器活动)。
      - CarChooseActivity,您可以在其中选择汽车。

      在 onResume() 方法上的 MainAcitivity 中尝试读取汽车数据(来自 SharedPreferences 或其他来源)。如果成功,则显示汽车数据,否则打开 CarChooseActivity。

      类似的东西:

      public class MainActivity extends AppCompatActivity {
      
      //code omitted
      
          @Override
          protected void onResume() {
              super.onResume();
      
      
              Car car = readCar();
              if (car == null){//no car saved
                  Intent i = new Intent(this, CarChooseActivity.class);
                  startActivity(i);
              }
      
          }
      
      //code omitted
      }
      
      
      public class CarChooseActivity extends AppCompatActivity {
      
          Button mSaveButton;
      
          @Override
          public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
              super.onCreate(savedInstanceState, persistentState);
      
              //code omitted
      
              mSaveButton = findViewById(R.id.savebutton);
              mSaveButton.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      saveCar();//save choosed car to SharedPreferences or other storage
                      finish();
                  }
              });
      
              //code omitted
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-28
        • 2017-09-18
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 2013-05-18
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        相关资源
        最近更新 更多