Android开发如何从splash activity跳转至用户所选兴趣对应的main activity
实现思路
核心逻辑是通过轻量存储持久化用户选择的兴趣标识,在Splash页初始化时读取该标识,动态匹配对应的目标Activity完成跳转:
- 用户在兴趣选择页完成选择后,将兴趣的唯一标识存入
SharedPreferences - SplashActivity启动后先校验登录状态,未登录则跳转登录/注册页;已登录则读取已存储的兴趣标识,根据标识跳转对应的专属MainActivity
分步实现代码示例
1. 兴趣选择页存储兴趣标识
用户确认选择兴趣后执行存储逻辑,示例代码(Java):
// 定义兴趣常量,统一管理所有兴趣标识 public static final String INTEREST_FOOTBALL = "FOOTBALL"; public static final String INTEREST_CRICKET = "CRICKET"; public static final String INTEREST_SINGING = "SINGING"; public static final String SP_KEY_INTEREST = "selected_interest"; public static final String SP_NAME = "app_config"; // 假设用户选择了足球,存储选择结果 SharedPreferences sp = getSharedPreferences(SP_NAME, MODE_PRIVATE); sp.edit().putString(SP_KEY_INTEREST, INTEREST_FOOTBALL).apply();
2. SplashActivity跳转逻辑实现
Splash页延迟结束后,读取存储的兴趣值完成跳转,示例代码(Java):
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); // 模拟Splash页3秒展示时长 new Handler(Looper.getMainLooper()).postDelayed(() -> { SharedPreferences sp = getSharedPreferences(SP_NAME, MODE_PRIVATE); // 先判断是否已登录,这里用是否存储了登录状态做示例,可替换为自己的登录校验逻辑 boolean isLogin = sp.getBoolean("is_login", false); if (!isLogin) { // 未登录跳转登录页 startActivity(new Intent(SplashActivity.this, LoginActivity.class)); finish(); return; } // 读取用户选择的兴趣 String selectedInterest = sp.getString(SP_KEY_INTEREST, null); Intent targetIntent = null; if (INTEREST_FOOTBALL.equals(selectedInterest)) { targetIntent = new Intent(SplashActivity.this, FootballMainActivity.class); } else if (INTEREST_CRICKET.equals(selectedInterest)) { targetIntent = new Intent(SplashActivity.this, CricketMainActivity.class); } else if (INTEREST_SINGING.equals(selectedInterest)) { targetIntent = new Intent(SplashActivity.this, SingingMainActivity.class); } else { // 未选择过兴趣,跳转兴趣选择页 targetIntent = new Intent(SplashActivity.this, InterestSelectActivity.class); } startActivity(targetIntent); finish(); }, 3000); }
如果你用Kotlin开发,对应逻辑示例:
// 常量定义放在伴生对象或者顶层常量 const val INTEREST_FOOTBALL = "FOOTBALL" const val INTEREST_CRICKET = "CRICKET" const val INTEREST_SINGING = "SINGING" const val SP_KEY_INTEREST = "selected_interest" const val SP_NAME = "app_config" // Splash页逻辑 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) Handler(Looper.getMainLooper()).postDelayed({ val sp = getSharedPreferences(SP_NAME, MODE_PRIVATE) val isLogin = sp.getBoolean("is_login", false) if (!isLogin) { startActivity(Intent(this, LoginActivity::class.java)) finish() return@postDelayed } val selectedInterest = sp.getString(SP_KEY_INTEREST, null) val targetIntent = when(selectedInterest) { INTEREST_FOOTBALL -> Intent(this, FootballMainActivity::class.java) INTEREST_CRICKET -> Intent(this, CricketMainActivity::class.java) INTEREST_SINGING -> Intent(this, SingingMainActivity::class.java) else -> Intent(this, InterestSelectActivity::class.java) } startActivity(targetIntent) finish() }, 3000) }
3. 注意事项
- 所有新建的专属MainActivity(比如
FootballMainActivity、CricketMainActivity等)都需要在AndroidManifest.xml中注册,否则会抛出Activity找不到的异常 - 如果后续要新增兴趣类别,只需新增对应的Activity、新增兴趣常量、加一行判断分支即可,也可以用工厂模式封装跳转逻辑,减少if/else分支的冗余
内容的提问来源于stack exchange,提问作者AKSHAT KANT THAKUR
相关产品推荐
相关产品推荐

