【问题标题】:how to start from different Activity in android studio如何从android studio中的不同Activity开始
【发布时间】:2015-01-23 23:45:36
【问题描述】:

我用两个活动制作应用程序。 冷杉有:

  • 2 ExitText(登录名和密码);
  • 按钮(确认,使用 SharedPreferences 保存数据,意图用于第二个活动)。

第二个:

  • 2 TextView(使用 SharedPreferences 获取登录名和密码);
  • 按钮(清除 SharedPreferences 上的数据,指向 firsActivity)。

如何进行下一步:虽然 SharedPreferences 上有一些数据 - 应用将从第二个屏幕启动。

例如,我做了:

if (user!=null && pass!=null){ Intent enterIntent = new Intent(MainActivity.this,SecondActivity.class); 开始活动(进入意图); }

但是,从技术上讲,它首先运行第一个活动,然后转到第二个活动。如果有一些方法可以使用另一个活动(不是 mainOne)启动应用程序?

【问题讨论】:

  • 清除您的分享偏好非常简单
  • 给你代码,这样我们就可以了解发生了什么

标签: android android-intent android-activity sharedpreferences


【解决方案1】:

在进入一个 Activity 之前,您将无法检查 SharedPreferences 中是否有值。

您可以做的是在显示 UI 之前检查该值(在调用 setContentView(R.layout.my_layout) 之前),然后继续,或者开始下一个 Activity。

public class MyStartActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SharedPreferences preferences = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
        if (preferences.contains("my_key")) {
            // start next Activity
        }

        setContentView(R.layout.my_layout);
    }

}

【讨论】:

  • 重要的是,不要将用户凭据存储在SharedPreferences
  • 谢谢!你的代码只需要一个修改 - 使用 ELSE: if (preferences.contains("my_key")) { // start next Activity } else { setContentView(R.layout.my_layout);效果很好,再次感谢!
  • OP 没有明确指定行为 - 此代码将在其 UI 初始化的情况下将初始活动保留在后台堆栈中。如果这不是必需的,如果 if 块是另一种解决方案,则在最后调用 finish(); return;
【解决方案2】:

如果您不希望第一个位于后堆栈,您可以在启动第二个后调用 finish()(或根据意图使用适当的标志)。

另一种方法是只让一个活动与片段一起,并动态决定哪一个在开始时设置。使用 Fragments,您还可以在按钮单击或后按时轻松更改布局。

【讨论】:

    【解决方案3】:

    我不确定它是否会起作用,因为应用程序必须从第一个活动开始。第一个活动检查登录并通过共享首选项,然后您可以转到第二个活动

    【讨论】:

      【解决方案4】:

      试试这个

       @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
      
              SharedPreferences preference = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
              if (preference.getSting("key",null)!= null) {
                  // start new Activity
                  //finish this activity so it not in back stack
              } else {
      
              setContentView(R.layout.my_layout);
              }
          }
      

      【讨论】:

      • 活动别名不会提供解决此问题的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      相关资源
      最近更新 更多