android:startActivityForResult方法的Activity跳轉

一、不帶數據的activityt跳轉能夠經過以下代碼跳轉,兩個activity之間沒有數據傳遞;git

Intent intent = new Intent(this ,跳轉的activity.class)
staintentrtActivity(intent)

  而在應用中還須要用到將一個activity的數據返回給另外一個activity進行處理,本節介紹其中一種攜帶數據跳轉的activity方法。github

  先有個概念,攜帶數據跳轉的activity能夠分爲三個步驟:ide

    1 首先在Activity1中調用方法startActivityForResult(),而後這時activity就跳轉到了Activity2;this

    2 而後在Activity2中將處理完的數據放入bundle中,綁定到intent上,spa

       調用方法setResult()把數據傳遞給Activity1,調用finish()方法將當前activity關閉;code

    3 最後在Activity1中添加一個onResultActivity(),用來處理setResult()傳遞過來的bundle數據。blog

      以上步驟沒有爲何,格式就是這樣子,套用就好了。get

二、如下咱們上代碼,具體分析見註釋。代碼的功能是在EditActivity中輸入內容,而後按下button跳轉回MainActivity以後,將內容顯示在方框中;it

  代碼GitHub地址:https://github.com/caesura-k/jump_activity.gitclass

  2.一、兩個activity的頁面以下:

    

  2.二、MainActivity的代碼

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView tv_message;
    private Button btn_jump;
    public static final int REQ_CODE_COMM_SET = 1;
    /*request code:正整型數值就行,爲了便於理解,取個名字*/

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_message= (TextView) this.findViewById(R.id.tv_message);
        tv_message.setOnClickListener(this);
        btn_jump= (Button) this.findViewById(R.id.btn_jump);
        btn_jump.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if(btn_jump.equals(view)){
            Intent intent =new Intent(this,EditActivity.class);
            startActivityForResult(intent,REQ_CODE_COMM_SET);
            /*startActivity跳轉到另外一個activity,返回的時候不會攜帶數據
            *startActivityForResult跳轉到另外一個activity,返回的時候能夠帶數據返回至當前activty,
            * 返回攜帶的數據在onActivityResult中接收處理,以上步驟是定義,沒有爲何*/
        }
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent intent){
        if (requestCode == REQ_CODE_COMM_SET) {
            if (resultCode == RESULT_OK) {
                Bundle bundle = intent.getExtras();
                String message = bundle.getString("message");
                tv_message.setText(message);
                Log.d("intent with bundle", " setting succ");
            }
            else if (resultCode == RESULT_CANCELED) {  }
        }
    }
}
/* A Activity攜帶數據返回至B Activity時,則會自動調用B Activity的onAcvitityResult方法來處理數據;
*   一、參數requestCode:
*       正整數;若是有多個activity跳轉返回至當前activity,request code能夠區分出來,方便處理不一樣的數據
*   二、參數resultCode:
*       只有兩個值,RESULT_OK、RESULT_CANCEL;表示activity是否跳轉成功;要是被中斷,值爲RESULT_CANCEL
*   三、參數intent:
*       就是前一個頁面攜帶數據的intent
* */

  2.三、EditActivity的代碼:

public class EditActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText et_enter ;
    private Button btn_back ;
    String message ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit);
        et_enter = (EditText) findViewById(R.id.et_enter);
        et_enter.setOnClickListener(this);
        btn_back = (Button) findViewById(R.id.btn_back);
        btn_back.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        if(btn_back.equals(view)){
            message= et_enter.getText().toString();

            Bundle bundle =new Bundle();
            bundle.putString("message",message);

            Intent intent = new Intent(this,MainActivity.class);
            intent.putExtras(bundle);

            setResult(RESULT_OK, intent);
            finish();
        }
    }
}
        /*將數據放入bundle中,而後將bundle綁定到intent上,
         *而後將intent放入setResult()方法中,intent就傳給了onActivityResult()*/
相關文章
相關標籤/搜索