android startActivityForResult实现Acitvity的回调
2012-07-31 18:01
701 查看
我们来看一个示例图:
首先我们看到一篇很有吸引力的文章时候都会忍不住去评论,可是在我们评论时候,会突然蹦到登录页面,才发现我们根本就没有登录,这也是现在大部分应用的结构吧,目的是先吸引住你,然后你会不自觉的想注册登录,反过来如果应用首先就登录,会觉得比较繁琐,心情不好,直接就drop了。我个人认为啊.不多说了,看下面实现.
我们这里主要用到的方法:
跳转:startActivityForResult(new Intent(this, LoginActivity.class), 1);
在LoginActivity中要执行setResult(RESULT_OK); finish(); 记住finish不可缺省的.不然回调后的页面会在LoginActivity这个页面下面,这肯定不是我们要的效果.原因简单,我不多说了.
最后我们要在本Activity回调:
/***
* requestCode 这个参数和上面startActivityForResult里面的requestCode是一一对应的.
* requestCode这个参数主要是用在同一个activity当中
* ,如果有好几处调用startActivityForResult,这时为了区分回调是谁执行的,就用requestCode来区分,
* 而由哪个activity返回的我们只需要resultCode就可以了.
* 所以onActivityResult里面的resultCode是setResult(RESULT_OK)和这里面的参数一致的.
* data用于传些数据或过滤.这里么有用到
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
代码片段:
这里我们需要在回调后执行这个activity的oncrate方法,可是我直接调用oncreate方法,没有反应,一气之下就这样搞了,效率不高,如果有好的解决方案给俺说一下,共同进步嘛.
下面是loginActivity.java代码片段:
效果如下:
我还讲解一下吧:
首先你点击oneActivity,TwoActivity,ThreeActivity她们会直接跳转至登录页面,因为你首次登录且没有登录.
在你点击TwoActivity后会跳转至登录页面,你输入好用户名密码,点击登录,这个时候会跳转至TwoActivity页面,相应的你点击ThreeActivity她会调转只ThreeActivity页面。做的非常丑陋,不过实现我期望的效果了,其实很简单,我想你早就OK了.
bug修改:
上面有个bug,如果在登录界面,你点击返回键就知道,其实我们应该监听登录的返回键的。下面是处理:
只是个方案,我们还可以根据需求进行调整,就说这么多了,如有好的建议,请给透漏给我一下.@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
源码下载
首先我们看到一篇很有吸引力的文章时候都会忍不住去评论,可是在我们评论时候,会突然蹦到登录页面,才发现我们根本就没有登录,这也是现在大部分应用的结构吧,目的是先吸引住你,然后你会不自觉的想注册登录,反过来如果应用首先就登录,会觉得比较繁琐,心情不好,直接就drop了。我个人认为啊.不多说了,看下面实现.
我们这里主要用到的方法:
跳转:startActivityForResult(new Intent(this, LoginActivity.class), 1);
在LoginActivity中要执行setResult(RESULT_OK); finish(); 记住finish不可缺省的.不然回调后的页面会在LoginActivity这个页面下面,这肯定不是我们要的效果.原因简单,我不多说了.
最后我们要在本Activity回调:
/***
* requestCode 这个参数和上面startActivityForResult里面的requestCode是一一对应的.
* requestCode这个参数主要是用在同一个activity当中
* ,如果有好几处调用startActivityForResult,这时为了区分回调是谁执行的,就用requestCode来区分,
* 而由哪个activity返回的我们只需要resultCode就可以了.
* 所以onActivityResult里面的resultCode是setResult(RESULT_OK)和这里面的参数一致的.
* data用于传些数据或过滤.这里么有用到
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
代码片段:
public class OneActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Session.username == null || Session.password == null || !Session.username.trim().equals("123") ||! Session.password.trim().equals("123")) { startActivityForResult(new Intent(this, LoginActivity.class), 1); return; } TextView textView = new TextView(this); textView.setText("OneActivity..."); setContentView(textView); } /*** * requestCode 这个参数和上面startActivityForResult里面的requestCode是一一对应的. * requestCode这个参数主要是用在在同一个activity当中 * ,有好几处调用startActivityForResult,这时为了区分谁执行的,就用requestCode来区分, * 而由哪个activity返回的我们只需要resultCode就可以了. * 所以onActivityResult里面的resultCode是setResult(RESULT_OK)和这里面的参数一致的. */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (Session.username != null && Session.password != null && Session.username.trim().equals("123") && Session.password.trim().equals("123")) { Intent intent = new Intent(OneActivity.this, OneActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); } finish(); } }这里需要说明一下:
这里我们需要在回调后执行这个activity的oncrate方法,可是我直接调用oncreate方法,没有反应,一气之下就这样搞了,效率不高,如果有好的解决方案给俺说一下,共同进步嘛.
下面是loginActivity.java代码片段:
findViewById(R.id.bt_login).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String username = ((EditText) findViewById(R.id.et_username)) .getText().toString(); String password = ((EditText) findViewById(R.id.et_password)) .getText().toString(); if (!username.equals("123") && !password.equals("123")) { Toast.makeText(LoginActivity.this, "用户名密码错误", 1000).show(); ((EditText) findViewById(R.id.et_username)).setText(""); ((EditText) findViewById(R.id.et_password)).setText(""); return; } // 模拟保存数据 Session.username = username; Session.password = password; setResult(RESULT_OK); finish(); } });这样就实现效果了。其实很简单很简单吧,主要是实现这个效果的思路,其实还有很多,有隐试Intent什么实现不了,哈哈.
效果如下:
我还讲解一下吧:
首先你点击oneActivity,TwoActivity,ThreeActivity她们会直接跳转至登录页面,因为你首次登录且没有登录.
在你点击TwoActivity后会跳转至登录页面,你输入好用户名密码,点击登录,这个时候会跳转至TwoActivity页面,相应的你点击ThreeActivity她会调转只ThreeActivity页面。做的非常丑陋,不过实现我期望的效果了,其实很简单,我想你早就OK了.
bug修改:
上面有个bug,如果在登录界面,你点击返回键就知道,其实我们应该监听登录的返回键的。下面是处理:
只是个方案,我们还可以根据需求进行调整,就说这么多了,如有好的建议,请给透漏给我一下.@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
return super.onKeyDown(keyCode, event);
}
源码下载
相关文章推荐
- Android 页面回调跳转(startActivityForResult)
- Android中关于startActivityForResult()在activity不同启动模式下onActivityResult()的回调
- Android RxActivityResult:优雅的方式实现startActivityForResult
- [Android]startActivityForResult启动singleTask的Activity,则onActivitResult()立即回调且resultCode为RESULT_CANCEL
- [Android]startActivityForResult启动singleTask的Activity,则onActivitResult()立即回调且resultCode为RESULT_CANCEL
- Android: 采用 startActivityForResult 实现多个Activity间不同不同跳转流程
- Android:startActivityForResult 和 onActivityResult 问题[转]
- android中使用startActivityForResult回传数据
- Fragment与Activity之间的通讯(解决Android中Fragment调用startactivityforresult不能返)
- 计算机学院研发第二轮考核--------Activity的回调(startActivityForResult)
- Android:startActivityForResult 和 onActivityResult 问题
- android 分享或者调用系统或者其他app时 应注意! startActivityForResult() 使用
- android StartActivityForResult()方法详解
- Android使用 startActivityForResult 、 onActivityResult 时的注意事项
- Android中StartActivityForResult()
- Android------startActivityForResult的详细用法
- Android开发系列(十三):Intent实现Activity之间的转换以及startActivityForResult传递参数
- Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回
- Android startActivityForResult的使用
- 关于startActivityForResult跳转页面返回时onActivityResult回调无法执行的问题