今天整理一下之前在项目中写的关于某些界面需要登录判断处理。这里整理了一个简易的 Demo 模拟一下 登录情况 和 未登录情况 下的界面跳转处理, 效果如图:
以上分别模拟了,未登录和已登录 情况下的 界面跳转和当前界面事件处理。接下来我们来看一下实现方式。
先从核心代码开始看:
public class GoLoginUtil {
public static final String CLASSNAME = "className";
public static final int CODE_LOGIN = 1; // 登录成功回调 用于onActivityForResult 判断
/**
* 登录成功之后,通过 activityResult 回调到当前界面
*
* @param activity
* @param intent
* @param requestCode
*/
private static void startActivity(Activity activity, Intent intent, int requestCode) {
if (requestCode == -1) {
String targetClass = intent.getComponent().getClassName(); // 目标类
intent.putExtra(CLASSNAME, targetClass);
}
intent.setClass(activity, LoginActivity.class); // 跳转重定向到登录界面
activity.startActivityForResult(intent, requestCode);
}
/**
* 登录成功之后,直接跳转目标 Activity
*
* @param activity
* @param intent
*/
public static void startActivity(Activity activity, Intent intent) {
startActivity(activity, intent, -1);
}
/**
* 登录成功回调到当前界面
* 使用 onActivityResult 方法接收, requestCode = CODE_LOGIN
*
* @param activity
* @param intent
*/
public static void startActivityForResult(Activity activity, Intent intent) {
startActivity(activity, intent, CODE_LOGIN);
}
}
这里可以看到,最主要的就是第一个 private 修饰的 startActivity 方法,看过 Android Activity 的 startActivity 方法源码的应该知道,它里面其实就是调用的 startActivityForResult(intent , -1) . 所以我们这里也来用一下它的写法。如果 等于 -1 ,那么就说明是有跳转目标 Activity 的,那么我们就通过 Intent.getComponent().getClassName() 来获取目标 Activity 的类名,再次添加到 Intent参数中,用于我们登录成功之后的后续跳转目标。当然,intent 中的其他参数是会一直携带着的,这里不用担心其他参数。 不等于 -1 那么就是要进行 setResult 回调了。所以,我们是通过 requestCode 是否等于 -1 来区分是继续跳转,还是回调当前界面。 工具类中的下面两个方法,就把功能区分开了,这里基本上看着系统源码来的。
然后再来进行一下二次封装,这里就需要判断当前 登录状态了,这里我也是模拟一下登录状态,代码如下:
public class IntentUtil {
public static boolean isLogin; // 模拟获取当前用户登录状态。
/**
* 需要登录判断
*
* @param activity
* @param clazz
* @param bundle
*/
public static void startToLogin(Activity activity, Class clazz, Bundle bundle) {
Intent intent = new Intent(activity, clazz);
if (bundle != null) {
intent.putExtras(bundle);
}
if (isLogin) {
activity.startActivity(intent);
} else {
GoLoginUtil.startActivity(activity, intent);
}
}
/**
* 登录成功会有回调
* requestCode = Contants.CODE_LOGIN
*
* @param activity
* @param bundle
*/
public static void startToLoginResult(Activity activity, Bundle bundle) {
Intent intent = new Intent();
if (bundle != null) {
intent.putExtras(bundle);
}
GoLoginUtil.startActivityForResult(activity, intent);
}
}
写到现在这样,基本上需要进行登录跳转界面的,可以直接调用 startToLogin 方法,根据登录状态进行跳转。至于 startToLoginResult 方法,目前还需要在调用时进行判断一下登录状态,进行区分处理,然后还要在 onActivityForResult 方法中进行回调处理,这个暂时没想到其他好的方法,各位大神如果有什么好的处理方式还请多多指教。
这里还没完呢,我们的登录界面也是需要一定的处理逻辑去进行配合的。我们来看一下怎么去配合:
public class LoginActivity extends FragmentActivity {
private String targetClass;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
targetClass = getIntent().getStringExtra(GoLoginUtil.CLASSNAME); // 目标跳转类
}
public void onLoginClick(View view) {
// 模拟登录成功操作
if (!TextUtils.isEmpty(targetClass)) {
// 这里就是执行继续跳转操作
try {
Class clazz = Class.forName(targetClass);
getIntent().setClass(this, clazz);
startActivity(getIntent());
finish();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else {
// 这里是登录成功,回调到之前界面 onActivityForResult()中 方法可根据自己需求处理。。
setResult(RESULT_OK);
finish();
}
}
}
最后来看一下我们的调用方式:
/**
* 登录跳转
*
* @param view
*/
public void onClick1(View view) {
Bundle bundle = new Bundle();
bundle.putString("content", et_content.getText().toString());
IntentUtil.startToLogin(this, LoginSuccessActivity.class, bundle);
}
/**
* 登录回调
*
* @param view
*/
public void onClick2(View view) {
if (!IntentUtil.isLogin) {
IntentUtil.startToLoginResult(this, null);
} else {
tv_text.setText("登录成功");
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
if (requestCode == CODE_LOGIN) {
tv_text.setText("登录成功");
}
}
基本上要整理的就这么多。写法上的一些不足,还请各位多多指点。
Demo 地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 登录
# Android开发之登录验证实例教程
# Android集成新浪微博第三方登录的方法
# Android设计登录界面、找回密码、注册功能
# Android实现登录功能demo示例
# Android开发之注册登录方法示例
# 功能强大的登录界面Android实现代码
# Android集成微信登录的步骤详解
# Android属性动画实现炫酷的登录界面
# Android调用第三方QQ登录代码分享
# Android开发实例之登录界面的实现
# 跳转
# 回调
# 要在
# 还请
# 有什么
# 看着
# 会有
# 第一个
# 是有
# 这么多
# 开了
# 就把
# 大神
# 再来
# 可以看到
# 写到
# 如图
# 最主要
# 用户登录
# 不等于
相关文章:
如何确保西部建站助手FTP传输的安全性?
建站之星各版本价格是多少?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何通过西部建站助手安装IIS服务器?
免费视频制作网站,更新又快又好的免费电影网站?
专业网站建设制作报价,网页设计制作要考什么证?
婚礼视频制作网站,学习*后期制作的网站有哪些?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
南平网站制作公司,2025年南平市事业单位报名时间?
建站主机如何选?高性价比方案全解析
C++时间戳转换成日期时间的步骤和示例代码
如何快速启动建站代理加盟业务?
如何构建满足综合性能需求的优质建站方案?
如何做网站制作流程,*游戏网站怎么搭建?
如何快速重置建站主机并恢复默认配置?
如何通过免费商城建站系统源码自定义网站主题与功能?
香港服务器租用费用高吗?如何避免常见误区?
如何快速搭建支持数据库操作的智能建站平台?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
制作网页的网站有哪些,电脑上怎么做网页?
如何配置FTP站点权限与安全设置?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何续费美橙建站之星域名及服务?
宝塔新建站点报错如何解决?
如何自定义建站之星网站的导航菜单样式?
网站网页制作专业公司,怎样制作自己的网页?
php json中文编码为null的解决办法
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
如何用花生壳三步快速搭建专属网站?
建站之星展会模版如何一键下载生成?
存储型VPS适合搭建中小型网站吗?
如何通过wdcp面板快速创建网站?
如何通过智能用户系统一键生成高效建站方案?
如何快速搭建响应式可视化网站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Python文件管理规范_工程实践说明【指导】
nginx修改上传文件大小限制的方法
图册素材网站设计制作软件,图册的导出方式有几种?
如何在建站之星绑定自定义域名?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
建站之星安装模板失败:服务器环境不兼容?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
高端企业智能建站程序:SEO优化与响应式模板定制开发
高防服务器:AI智能防御DDoS攻击与数据安全保障
建站主机功能解析:服务器选择与快速搭建指南
岳西云建站教程与模板下载_一站式快速建站系统操作指南
孙琪峥织梦建站教程如何优化数据库安全?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
宝塔Windows建站如何避免显示默认IIS页面?
*请认真填写需求信息,我们会在24小时内与您取得联系。