读书人

android startActivityForResult兑现A

发布时间: 2012-09-10 11:02:32 作者: rapoo

android startActivityForResult实现Acitvity的回调

我们来看一个示例图:

android startActivityForResult兑现Acitvity的回调 android startActivityForResult兑现Acitvity的回调 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 {@Overrideprotected 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)和这里面的参数一致的. */@Overrideprotected 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() {@Overridepublic 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什么实现不了,哈哈.

效果如下:


android startActivityForResult兑现Acitvity的回调 android startActivityForResult兑现Acitvity的回调 android startActivityForResult兑现Acitvity的回调 android startActivityForResult兑现Acitvity的回调


我还讲解一下吧:

首先你点击oneActivity,TwoActivity,ThreeActivity她们会直接跳转至登录页面,因为你首次登录且没有登录.

在你点击TwoActivity后会跳转至登录页面,你输入好用户名密码,点击登录,这个时候会跳转至TwoActivity页面,相应的你点击ThreeActivity她会调转只ThreeActivity页面。做的非常丑陋,不过实现我期望的效果了,其实很简单,我想你早就OK了.






读书人网 >Android

热点推荐