TShopping

 找回密碼
 註冊
搜索
查看: 1199|回復: 0
打印 上一主題 下一主題

[教學] android startActivityForResult實現回調Acitvity

[複製鏈接]
跳轉到指定樓層
1#
發表於 2017-8-31 07:51:45 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
我們來看一個示例圖:
首先我們看到一篇很有吸引力的文章時候都會忍不住去評論,可是在我們評論時候,會突然蹦到登錄頁面,才發現我們根本就沒有登錄,這也是現在大部分應用的結構吧,目的是先吸引住你,然後你會不自覺的想注冊登錄,反過來如果應用首先就登錄,會覺得比較繁瑣,心情不好,直接就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);
}

代碼片段:
  1. public class OneActivity extends Activity {
  2.         @Override
  3.         protected void onCreate(Bundle savedInstanceState) {
  4.                 super.onCreate(savedInstanceState);
  5.                 if (Session.username == null || Session.password == null
  6.                                 || !Session.username.trim().equals("123")
  7.                                 ||! Session.password.trim().equals("123")) {
  8.                         startActivityForResult(new Intent(this, LoginActivity.class), 1);
  9.                         return;
  10.                 }
  11.                 TextView textView = new TextView(this);
  12.                 textView.setText("OneActivity...");
  13.                 setContentView(textView);

  14.         }

  15.         /***
  16.          * requestCode 這個参數和上面startActivityForResult裏面的requestCode是一一對應的.
  17.          * requestCode這個参數主要是用在在同一個activity當中
  18.          * ,有好幾處調用startActivityForResult,這時为了區分誰執行的,就用requestCode來區分,
  19.          * 而由哪個activity返回的我們只需要resultCode就可以了.
  20.          * 所以onActivityResult裏面的resultCode是setResult(RESULT_OK)和這裏面的参數一致的.
  21.          */
  22.         @Override
  23.         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  24.                 super.onActivityResult(requestCode, resultCode, data);
  25.                 if (Session.username != null && Session.password != null
  26.                                 && Session.username.trim().equals("123")
  27.                                 && Session.password.trim().equals("123")) {
  28.                         Intent intent = new Intent(OneActivity.this, OneActivity.class);
  29.                         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  30.                         startActivity(intent);
  31.                 }
  32.                 finish();

  33.         }

  34. }
複製代碼


這裏需要說明一下:
這裏我們需要在回調後執行這個activity的oncrate方法,可是我直接調用oncreate方法,沒有反應,一氣之下就這样搞了,效率不高,如果有好的解决方案给俺說一下,共同進步嘛.
下面是loginActivity.java代碼片段:
  1. findViewById(R.id.bt_login).setOnClickListener(new OnClickListener() {
  2.                         @Override
  3.                         public void onClick(View v) {
  4.                                 String username = ((EditText) findViewById(R.id.et_username))
  5.                                                 .getText().toString();
  6.                                 String password = ((EditText) findViewById(R.id.et_password))
  7.                                                 .getText().toString();
  8.                                 if (!username.equals("123") && !password.equals("123")) {
  9.                                         Toast.makeText(LoginActivity.this, "用戶名密碼錯誤", 1000).show();
  10.                                         ((EditText) findViewById(R.id.et_username)).setText("");
  11.                                         ((EditText) findViewById(R.id.et_password)).setText("");
  12.                                         return;
  13.                                 }
  14.                                 // 模擬保存數據
  15.                                 Session.username = username;
  16.                                 Session.password = password;
  17.                                 setResult(RESULT_OK);
  18.                                 finish();
  19.                         }
  20.                 });
複製代碼

這样就實現效果了。其實很簡單很簡單吧,主要是實現這個效果的思路,其實還有很多,有隱試Intent什麼實現不了,哈哈.
效果如下:

           

我還講解一下吧:
         首先你點擊oneActivity,TwoActivity,ThreeActivity她們會直接跳轉至登錄頁面,因为你首次登錄且沒有登錄.
         在你點擊TwoActivity後會跳轉至登錄頁面,你輸入好用戶名密碼,點擊登錄,這個時候會跳轉至TwoActivity頁面,相應的你點擊ThreeActivity她會調轉只ThreeActivity頁面。做的非常醜陋,不過實現我期望的效果了,其實很簡單,我想你早就OK了.



 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-5-2 05:57 , Processed in 0.076950 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表