Intent資料傳遞

2022-02-17 13:17:42 字數 4039 閱讀 6953

(1)首先是activity的簡單跳**

1)、activity的切換一般是通過intent來實現的,intent是乙個activity到達另乙個activity的引路者,它描述了起點(當前activity)和終點(目標activity)。乙個簡單intent實現如下: (個人計較喜歡直接定義的方式  )

intent intent = new intent();                           //

建立乙個intent物件

intent.setclass(activity1.this, activity2.class); //

描述起點和目標

startactivity(intent); //

開始跳轉

//或者直接使用

intent = (intent) new intent(activity1.this,activity2.class)

2)、通常,我們在activity的切換中,希望把前乙個activity1

的某些資料傳遞給下乙個activity2

。這時,我們可以借助bundle來實現。bundle,相當於資料儲存包,用於存放我們想要轉達的資料。打個比方,intent就像一封郵件,裡面有送信人位址(原始activity),也有收信人位址(目標activity),而bundle就是附件也可看做是信件內容。下面是它的簡單實現:

a、activity1傳送:

intent intent = new

intent();

intent.setclass(activity1.

this, activity2.class); //

描述起點和目標

bundle bundle = new bundle(); //

建立bundle物件

bundle.putstring("

something

", "

activity1發來的資料

"); //

裝入資料

intent.putextras(bundle); //

把bundle塞入intent裡面

startactivity(intent); //

開始切換

b、activity2接受從activity1發來的資料:

intent intent = this.getintent();        //

獲取已有的intent物件

bundle bundle = intent.getextras(); //

獲取intent裡面的bundle物件

string = bundle.getstring("

something

"); //

獲取bundle裡面的字串

3)、解決了如何傳遞資料問題,那麼下乙個問題是如何接受從目標activity返回的處理結果。這裡有兩種方式,一是在onrestart方法(onrestrart表示重啟activity時激發的事件)裡面接受處理結果,方法實現和activit  y2接受從activity1發來的資料處理一樣。另一種方式,是採用應答模式切換。這裡,主要下第二種方式。應答模式切換和普通  的切換不同在於,普通的是有去沒回,應答則是有來有往。**實現也不一樣:1、從activity1切換到activity2:startactivityforresult(intent,0);2、從activity2返回到activity1:setresult(result_ok, intent)。3、接受返回結果:protected void onactivityresult()。具體**如下;

a、從activity1切換到activity2:

intent intent = new

intent();

intent = intent.setclass(activityintent.this, anotheractivity.class

);

bundle bundle = new

bundle();

bundle.putstring(

"string

", et_string.gettext().tostring());

intent.putextras(bundle);

startactivityforresult(intent,

0); //

只有這裡不同 //

activityintent.this.finish();

//不能用finish,會觸發ondestroy();

b、從activity2返回到activity1:

intent intent = new

intent();

intent = intent.setclass(anotheractivity.this, activityintent.class

);

bundle bundle = new

bundle();

bundle.putint(

"result

", "

activity2的處理結果

");

intent.putextras(bundle);

anotheractivity.

this.setresult(result_ok, intent); //

result_ok是返回狀態碼

anotheractivity.this.finish(); //

會觸發ondestroy();

c、activity1接受activity2的返回結果:

protected

void onactivityresult(int requestcode, int

resultcode, intent data)

}

4、從activity2中返回到activity1(在activity1切換到activity2時,呼叫了finish方法),你會發現你在activity1以前的資料全沒了,簡單的說就是資料被沒有保留下來。因為finish方法,會觸發ondestroy(),使得activity1銷毀。下一次再來到activity1時,是全新的activity1,以往的資料當然不在。如果想保留切換前的狀態,可以採用兩種方式:1、切換時,不呼叫finish()方法。2、採用sharedpreferences來儲存資料。sharedpreferences 是乙個輕量級儲存類,主要用於儲存一些窗體的狀態,如文字框值、按鈕狀態等等,類似於session。一般在onpause()方法裡面儲存資料,在onresume()裡面提取資料。實現如下:

a、儲存資料

//

暫停:onstart()->onresume()->onpause()

@override

protected

void

onpause()

b、提取資料

//

重啟:onstart()->onresume()

@override

protected

void

onresume()

}

Intent資料傳遞

1 首先是activity的簡單跳 activity的切換一般是通過intent來實現的,intent是乙個activity到達另乙個activity的引路者,它描述了起點 當前activity 和終點 目標activity 乙個簡單intent實現如下 intent intent new inte...

Intent資料傳遞

1 首先是activity的簡單跳 activity的切換一般是通過intent來實現的,intent是乙個activity到達另乙個activity的引路者,它描述了起點 當前activity 和終點 目標activity 乙個簡單intent實現如下 intent intent new inte...

Intent資料傳遞

1 首先是activity的簡單跳 activity的切換一般是通過intent來實現的,intent是乙個activity到達另乙個activity的引路者,它描述了起點 當前activity 和終點 目標activity 乙個簡單intent實現如下 intent intent new inte...