標(biāo)題:
在不同的Activity之間傳遞數(shù)據(jù)
[打印本頁(yè)]
作者:
liuyy
時(shí)間:
2015-1-12 01:12
標(biāo)題:
在不同的Activity之間傳遞數(shù)據(jù)
在Android中傳遞數(shù)據(jù)的方法非常多,主要學(xué)習(xí)了四種:
1.通過(guò)Intent傳遞數(shù)據(jù)
2.通過(guò)靜態(tài)變量傳遞數(shù)據(jù)
3.通過(guò)剪切板傳遞數(shù)據(jù)
4.通過(guò)全局變量傳遞數(shù)據(jù)
一、通過(guò)Intent傳遞數(shù)據(jù)
這是最常用的一種數(shù)據(jù)傳遞的方法。通過(guò)Intent.putExtra()方法可以將簡(jiǎn)單類型的數(shù)據(jù)或者可序列化的對(duì)象保存在Intent對(duì)象中,然后在目標(biāo)Activity中使用getXxx(getInt、getString等)方法獲得這些數(shù)據(jù)。
在當(dāng)前的Activity代碼中:
Intent intent = new Intent();
intent.setClass(TransmitDataMainActivity.this,activity1.class);//TransmitDataMainActivity是目前的窗口,activity是目標(biāo)窗口
intent.putExtra("Name", "張三");
intent.putExtra("Age", "22");
intent.putExtra("Sex", "男");
startActivity(intent);//開(kāi)始跳轉(zhuǎn)
在目標(biāo)Activity代碼中:
String Name = intent.getStringExtra("Name");
String Age = intent.getStringExtra("Age");
String Sex = intent.getStringExtra("Sex");
二、使用靜態(tài)變量傳遞數(shù)據(jù)
雖然使用Intent對(duì)象可以很方便的傳遞數(shù)據(jù),這也是官方推薦的方式,但是Intent有他的局限性,Intent無(wú)法傳遞不能序列化的對(duì)象,也就是沒(méi)有實(shí)現(xiàn)java.io.Serializable接口的類創(chuàng)建的對(duì)象。例如,圖像Bitmap對(duì)象就無(wú)法通過(guò)Intent傳遞。
可以在使用靜態(tài)變量進(jìn)行傳遞數(shù)據(jù)。如在目標(biāo)Activity(如Activity2)中:
public static String Name;
public static String Age;
public static String Sex;
在其他的Activity中便可以使用Activity2.Name、Activity2.Age、Activity.Sex就可以訪問(wèn)來(lái)實(shí)現(xiàn)數(shù)據(jù)的傳遞。
三、使用剪切板傳遞數(shù)據(jù)
由于剪切板只能存儲(chǔ)簡(jiǎn)單類型數(shù)據(jù)以及可序列化的對(duì)象,對(duì)于某些不可序列化的對(duì)象如果可以將其轉(zhuǎn)化為字節(jié)流,也可以將這些對(duì)象保存在剪切板中。
四、使用全局對(duì)象傳遞數(shù)據(jù)
雖然使用靜態(tài)變量可以傳遞任意類型的數(shù)據(jù),但是官方不建議這么做。如果在類中大量的使用靜態(tài)變量(尤其是使用很占資源的變量,如Bitmap對(duì)象)可能會(huì)導(dǎo)致內(nèi)存溢出,而且還可能因?yàn)殪o態(tài)變量在很多類中出現(xiàn)而造成代碼難以維護(hù)和混亂的狀況。全局對(duì)象可以完全取代靜態(tài)變量。
Android中的 全局對(duì)象所對(duì)應(yīng)的類可以從android.app.Application繼承。下面就是一個(gè)典型的全局類。
public class MyApp extends Application
{
public String country;
public Data data = new Data();
}
在編寫完全局類之后,還需要通過(guò)<application>在AndroidManifext.xml中注冊(cè)。
然后通過(guò)Activity.getApplicationContext()方法可以獲得全局對(duì)象。
MyApp app = (MyApp) getApplicationContext();
app.country = "中國(guó)";
app.data.id = "123";
app.data.name = "人民";
作者:
liuyy
時(shí)間:
2015-1-12 01:13
在實(shí)驗(yàn)室呆了一天,看了Android的開(kāi)發(fā)視頻教程,然后寫程序,改程序。
今天粗略的學(xué)習(xí)了Activity的生命周期,還有Activity的布局。
收獲:
1.每一個(gè)控件的android:layout_width和android:layout_height都要設(shè)置,而且可以直接設(shè)置大小,不一定局限于給定的三個(gè)參數(shù),fill_parent、match_matchparent、wrap_content。
2.通過(guò)findViewById(int)方法獲取控件的時(shí)候一定要注意是否已經(jīng)使用了setContentView()關(guān)聯(lián)了布局文件,而且只能獲取當(dāng)前View的控件,否則就會(huì)得到了Null,然后后面再調(diào)用對(duì)象方法的時(shí)候就會(huì)出現(xiàn)錯(cuò)誤。
3.聲明周期函數(shù)OnStop()只有當(dāng)一個(gè)Activity2完全遮擋住了Activity1的時(shí)候,才會(huì)調(diào)用Actitvity1的onStop()方法。
4.對(duì)于字符資源最好統(tǒng)一的在res/values/strings.xml中定義,這樣如果更改字符資源的時(shí)候就可以牽一發(fā)動(dòng)全身,不需要逐個(gè)的更改。
5.建立工程文件的時(shí)候選擇的最低版本SDK會(huì)對(duì)代碼產(chǎn)生影響,因?yàn)橛械腁PI只能在高版本中使用!
6.AndroidManifest.xml不可以更改名稱,每一個(gè)Activity都要在這個(gè)文件中進(jìn)行注冊(cè)。而且在此文件中可以聲明哪個(gè)Activity為主窗口,住過(guò)設(shè)置了多個(gè)主窗口,安裝程序的時(shí)候就會(huì)分別產(chǎn)生相應(yīng)的圖標(biāo)。
感想:難點(diǎn)不在于功能的代碼實(shí)現(xiàn),而在于布局XML文件的編寫,弄出來(lái)一個(gè)好看的界面真心不容易,可能是我還是菜鳥(niǎo)的原因吧,干什么都不容易!下次再用什么App的時(shí)候別再噴了,其實(shí)做什么都是不容易的,尊重別人的勞動(dòng)成果。
下一步計(jì)劃:繼續(xù)學(xué)習(xí)XML文件布局,以及常用控件的使用,先把布局練習(xí)好,功能實(shí)現(xiàn)不急。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1