android startActivityForResult實現Acitvity的回調

來源:互聯網
上載者:User

我們來看一個樣本圖:

                      

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

效果如下:


        
 


我還講解一下吧:

         首先你點擊oneActivity,TwoActivity,ThreeActivity她們會直接跳轉至登入頁面,因為你首次登入且沒有登入.

         在你點擊TwoActivity後會跳轉至登入頁面,你輸入好使用者名稱密碼,點擊登入,這個時候會跳轉至TwoActivity頁面,相應的你點擊ThreeActivity她會調轉只ThreeActivity頁面。做的非常醜陋,不過實現我期望的效果了,其實很簡單,我想你早就OK了.

       
bug修改:

        上面有個bug,如果在登入介面,你點擊返回鍵就知道,其實我們應該監聽登入的返回鍵的。下面是處理:

        只是個方案,我們還可以根據需求進行調整,就說這麼多了,如有好的建議,請給透漏給我一下.

@Overridepublic 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);}

     
源碼下載



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.