我們來看一個示例圖: 首先我們看到一篇很有吸引力的文章時候都會忍不住去評論,可是在我們評論時候,會突然蹦到登錄頁面,才發現我們根本就沒有登錄,這也是現在大部分應用的結構吧,目的是先吸引住你,然後你會不自覺的想注冊登錄,反過來如果應用首先就登錄,會覺得比較繁瑣,心情不好,直接就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了.
|