android startActivityForResult实现Acitvity的回调

我们来看一个示例图:

                      

        首先我们看到一篇很有吸引力的文章时候都会忍不住去评论,可是在我们评论时候,会突然蹦到登录页面,才发现我们根本就没有登录,这也是现在大部分应用的结构吧,目的是先吸引住你,然后你会不自觉的想注册登录,反过来如果应用首先就登录,会觉得比较繁琐,心情不好,直接就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);
	}

      源码下载



  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值