【问题标题】:Splash screen redirecting wrong Activity android启动屏幕重定向错误的Activity android
【发布时间】:2015-02-01 14:32:38
【问题描述】:

基本上我有一个启动页面的处理程序,它会在 5 秒后重定向到主菜单。

但是,我也有一个设置页面,在第一次设置时可以看到,但发生的事情是它认为这是一个启动页面,并在 x 秒后被重定向。我需要这个在 x 秒内不重定向,只需要启动屏幕“MainActivity”重定向。

主要问题:

首次设置会加载首选项。 问题:5 秒后重定向。

应该发生的事情: 第一次设置加载首选项。 允许用户输入详细信息并保存。 下次启动时,会出现启动页面,该页面会在 5 秒后重定向。

这是我的代码:

public class MainActivity extends Activity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                final Intent mainIntent = new Intent(MainActivity.this, MainMenu.class);
                MainActivity.this.startActivity(mainIntent);
                MainActivity.this.finish();
            }
        }, 5000);

        // get shared preferences
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        // first time run?
        if (pref.getBoolean("firstTimeRun", true)) {

            // start the preferences activity
            startActivity(new Intent(getBaseContext(), Preferences.class));

            //get the preferences editor
            SharedPreferences.Editor editor = pref.edit();

            // avoid for next run
            editor.putBoolean("firstTimeRun", false);
            editor.commit();

        }

    }

【问题讨论】:

  • 无法理解您的问题。而且你不需要 Activity 的上下文来启动一个意图。
  • 不要使用模糊的术语,具体说明问题!
  • 添加了更好的描述

标签: android redirect


【解决方案1】:

我重新排列了你的代码来说明你想要发生的事情。

应该发生什么:第一次设置加载首选项。允许用户输入详细信息并保存。下次启动时,会出现启动页面,该页面会在 5 秒后重定向。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity);
        // get shared preferences
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
        // first time run?
        if (pref.getBoolean("firstTimeRun", true)) {
            // start the preferences activity
            startActivity(new Intent(this, Preferences.class));
            //get the preferences editor
            SharedPreferences.Editor editor = pref.edit();
            // avoid for next run
            editor.putBoolean("firstTimeRun", false);
            editor.commit();
        } else {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    final Intent mainIntent = new Intent(MainActivity.this, MainMenu.class);
                    startActivity(mainIntent);
                    finish();
                }
            }, 5000);
        }
    }
}

【讨论】:

  • 这种修复它,设置后会发生什么,它进入不重定向的启动屏幕。我怎么能说在首选项菜单之后它加载了 MainMenu
  • 如果你想在偏好之后加载主菜单然后覆盖主活动中的onactivityresult并加载主菜单(当子活动完成时调用父onactivityresult)
  • 我很困惑我该怎么做?
【解决方案2】:

您是否尝试将活动结果设置为 RESULT_OK

【讨论】:

  • 没有不知道怎么办
【解决方案3】:

据我所知,这应该可以解决您的问题

public class MainActivity extends Activity {

private static final int REQUESTCODE = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainactivity);
    Toast.makeText(this, "MainActivity", Toast.LENGTH_SHORT).show();

    // get shared preferences
    SharedPreferences pref = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());

    // first time run?
    if (pref.getBoolean("firstTimeRun", true)) {

        // start the preferences activity
        startActivityForResult(new Intent(getBaseContext(),Preference.class), REQUESTCODE);

        // get the preferences editor
        SharedPreferences.Editor editor = pref.edit();

        // avoid for next run
        editor.putBoolean("firstTimeRun", false);
        editor.commit();

    } else {
        startMainMenu();
    }

}

public void startMainMenu() {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            final Intent mainIntent = new Intent(MainActivity.this,
                    MainMenu.class);
            MainActivity.this.startActivity(mainIntent);
            MainActivity.this.finish();
        }
    }, 5000);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUESTCODE) {
        if (resultCode == Activity.RESULT_OK) {
            startMainMenu();
        }
    }
}
}

在设置偏好调用函数'setResult()'后的偏好活动中

public class Preference extends Activity{
@Override
protected void onCreate(Bundle savedInstance){
/**
Add necessary preferences to shared preference
**/

if(sharedPreference successfully entered){
    setResult(RESULT_OK);
}else{
    setResult(RESULT_CANCELED);
}
finish();

}

更多详情http://developer.android.com/reference/android/app/Activity.html#StartingActivities

希望对你有所帮助...

【讨论】:

  • No没用:(保存首选项后,只是卡在启动屏幕上。不去MainMenu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多