一. 使用Internt 鏈接activityjava
1.建立 intent android
用下面的構造方法ide
Intent.Intent(Context packgeContext ,Class <?> cls );spa
或者先構造 一個未指向 的intent,再用下面方法設計
Intent.getClass(Context packageContext,Class <?> cls);code
2.調用 Intentorm
Activity.startActivity( Intent intent);xml
若是 想下一個Activity時返回原來 的activity ,則對象
Activity.startActivityForResult (Intent intent ,int requestCode );ci
note :應用中的activity都要在 manifest文件中註冊。
二. 使用activity傳遞數據
1. 在第一個activity中存入 數據 ,
Intent.putExra( String name ,String value );
name value 相似於鍵 值對應的,如HashMap ,name =key。不過這裏它們的類型是Bundle(專門爲activity面設計 的,本質 是HashMap的再封裝。
2.在目標activity中取出intent中的值
先用getIntent();獲得intent對象。再
Intent.getExtras() ;
獲得的是一個Bundle對象。
Bundle.getString( String key )
從而獲得裏面的key對應的 數據 。
三。若是要返回
steps:
1. Activity.startActivityForResult( Intent intent ,int requestCode )
第二個參數 是請求碼,用來標識 此次請求
2. 在onActivityResult 中,咱們對返回的結果 進行處理。
protected void onActivityResult (int requesCode, int resultCode ,Intent data){
super.onActivityResult(...);
}
參數1:請求碼,標識本次結果對應那個請求。
參數2:結果碼,兩種 。
RESULT_OK =-1:本次操做成功,則返回這個
RESUKT_CANCELLED = 0:操做取消,返回這個值 。
還有一個是 1 。本身定義 不要與之重複。
結果碼除了能夠用來區分 操做是否成功,還能夠 區分 是由那個activity 返回的 。
參數3 :能夠用 Intent.getExtras() 獲得返回的值。
3.在目標activity中new 一個 Intent 對象,不用指定要跳轉的activity
再使用 Intent.putExtras(Bundle bundle) 將數據與intent 綁定。
4.將intent 傳入到結果 中,用
Activity.setResult( int requestCode, Intent data );
5 .調用 finish()。
結束本activity ,系統 會自動 調用 以前 的onActivityResult ().
onActivityResult(int requestCode, int resultCode, Intent data)中:
requestCode-->鑑別是誰打開的。
resultCode--->鑑別誰返回(關閉)的。
*startActivityForResult(intent, requestCode)首先文檔告訴咱們,只有到activity結束的時候,纔會返回消息。
*startActivityForResult(intent, requestCode)中的倆個參數 ,第一個不用多說。第二個requestCode,通常狀況下,咱們只須要保證
requestCode>-1便可,這樣它都能收到result。可是若是在A activity中,可以跳轉到多個activiity,而且要接受到這多個activity中的信息的時候,咱們就要注意了,這時候,requestCode就起大做用了,當你startActiviityForResult()的時候, 給每個不一樣的activity一個獨立的requestcode,那麼在你接受到result的時候就能夠經過這個參數來判斷,結果是那個acitivity返回來的了。
*那麼若是是,A activity跳轉到B activity的時候,b有可能返回N種結果,而你在A中須要根據這N中不通的返回結果作出N種不通的處理的時候那該怎麼辦呢?固然,你能夠用data,中添加數據了識別,可是android提供了更好的一種方式,那就是
onActivityResult(requestCode, resultCode, data)中的resultcode,你能夠setresult()的時候,根據不通的結果返回不一樣的resultcode,這樣就能區分開來。
三。例子
咱們完成下面的例子,主要用到的知識點有:
(1)startActivityForResult ()
(2) requestCode 和 resultCode 的不一樣
(3) Edittext中怎麼加入提示。要用到 android:hint 標籤
1 。首先是界面文件,這裏只寫要注意的:
<EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_marginTop="19dp" android:hint="請輸入姓名" android:focusable="true" android:focusableInTouchMode="true" android:ems="10" >
2. java文件
首先是總體部分的關鍵部分
先定義 了
static final int REQUEST_CODE1=1; //requestCode-->鑑別是誰打開的。 static final int REQUEST_CODE2=2; static final int RESULT1=2; //activity 1 中返回兩結果 static final int RESULT2=3;
而後
btn1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent i1= new Intent (getBaseContext(),Act1.class); startActivityForResult(i1 ,REQUEST_CODE1); //由 btn1 打開的 } }); btn2.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent i2= new Intent(getBaseContext(), Act2.class); startActivityForResult (i2 ,REQUEST_CODE2); //由 btn 2 打開 的 } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub switch(requestCode){ case REQUEST_CODE1: //分辨是那個請求的結果 if(resultCode==RESULT1){ Bundle bundle=data.getExtras(); String request1= bundle.getString("activity1"); tv1.setText("request1 result1 :"+request1); }else if (resultCode==RESULT2){ Bundle bundle=data.getExtras(); String request1= bundle.getString("activity1"); tv1.setText("request1 result2 :"+request1); } case REQUEST_CODE2: if(resultCode==RESULT_OK){ //此處是否要用break; Bundle bundle2 = data.getExtras(); String request2 =bundle2.getString("activity2"); tv2.setText("request2 :"+request2); } default: break; } super.onActivityResult(requestCode, resultCode, data); }
而後是activity 1 的關鍵部分
定義 了
static final int RESULT1=2; static final int RESULT2=3;
btnR2.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub String resultActivity1= et2.getText().toString(); Intent irequest1= new Intent (); Bundle bundle = new Bundle(); bundle.putString("activity1", resultActivity1); irequest1.putExtras(bundle); setResult(RESULT2,irequest1); finish(); } }); btnR1.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub String resultActivity1= et1.getText().toString(); Intent irequest1 = new Intent (); Bundle bundle = new Bundle(); bundle.putString("activity1", resultActivity1); irequest1.putExtras(bundle); setResult(RESULT1, irequest1); finish(); } });
activity 2 的主要部分
btnR.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub String resultActivity2 = et.getText().toString(); Intent irequest2= new Intent (); Bundle bundle = new Bundle(); bundle.putString("activity2", resultActivity2); irequest2.putExtras(bundle); setResult(RESULT_OK, irequest2); finish(); } }); et.setOnFocusChangeListener(new OnFocusChangeListener(){ @Override public void onFocusChange(View v, boolean hasFocus) { // TODO Auto-generated method stub String hint ; if (hasFocus){ hint = et.getHint().toString(); et.setTag(hint); et.setHint(""); }else { hint = et.getTag().toString(); et.setHint(hint); } } });