找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4733|回復: 1
打印 上一主題 下一主題
收起左側(cè)

在不同的Activity之間傳遞數(shù)據(jù)

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72008 發(fā)表于 2015-1-12 01:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    在Android中傳遞數(shù)據(jù)的方法非常多,主要學習了四種:
    1.通過Intent傳遞數(shù)據(jù)
    2.通過靜態(tài)變量傳遞數(shù)據(jù)
    3.通過剪切板傳遞數(shù)據(jù)
    4.通過全局變量傳遞數(shù)據(jù)
一、通過Intent傳遞數(shù)據(jù)
    這是最常用的一種數(shù)據(jù)傳遞的方法。通過Intent.putExtra()方法可以將簡單類型的數(shù)據(jù)或者可序列化的對象保存在Intent對象中,然后在目標Activity中使用getXxx(getInt、getString等)方法獲得這些數(shù)據(jù)。
    在當前的Activity代碼中:
    Intent intent = new Intent();
    intent.setClass(TransmitDataMainActivity.this,activity1.class);//TransmitDataMainActivity是目前的窗口,activity是目標窗口
                                            intent.putExtra("Name", "張三");
                                            intent.putExtra("Age", "22");
                                            intent.putExtra("Sex", "男");
                                            startActivity(intent);//開始跳轉(zhuǎn)
    在目標Activity代碼中:
    String Name = intent.getStringExtra("Name");
    String Age    = intent.getStringExtra("Age");
    String Sex    = intent.getStringExtra("Sex");
二、使用靜態(tài)變量傳遞數(shù)據(jù)
    雖然使用Intent對象可以很方便的傳遞數(shù)據(jù),這也是官方推薦的方式,但是Intent有他的局限性,Intent無法傳遞不能序列化的對象,也就是沒有實現(xiàn)java.io.Serializable接口的類創(chuàng)建的對象。例如,圖像Bitmap對象就無法通過Intent傳遞。
    可以在使用靜態(tài)變量進行傳遞數(shù)據(jù)。如在目標Activity(如Activity2)中:
    public static String Name;
    public static String Age;
    public static String Sex;
    在其他的Activity中便可以使用Activity2.Name、Activity2.Age、Activity.Sex就可以訪問來實現(xiàn)數(shù)據(jù)的傳遞。
三、使用剪切板傳遞數(shù)據(jù)
    由于剪切板只能存儲簡單類型數(shù)據(jù)以及可序列化的對象,對于某些不可序列化的對象如果可以將其轉(zhuǎn)化為字節(jié)流,也可以將這些對象保存在剪切板中。
四、使用全局對象傳遞數(shù)據(jù)
    雖然使用靜態(tài)變量可以傳遞任意類型的數(shù)據(jù),但是官方不建議這么做。如果在類中大量的使用靜態(tài)變量(尤其是使用很占資源的變量,如Bitmap對象)可能會導致內(nèi)存溢出,而且還可能因為靜態(tài)變量在很多類中出現(xiàn)而造成代碼難以維護和混亂的狀況。全局對象可以完全取代靜態(tài)變量。
    Android中的 全局對象所對應的類可以從android.app.Application繼承。下面就是一個典型的全局類。
    public class MyApp extends Application
    {
        public String country;
        public Data data = new Data();
    }
    在編寫完全局類之后,還需要通過<application>在AndroidManifext.xml中注冊。
    然后通過Activity.getApplicationContext()方法可以獲得全局對象。
    MyApp app = (MyApp) getApplicationContext();
    app.country = "中國";
    app.data.id  = "123";
    app.data.name = "人民";

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:72008 發(fā)表于 2015-1-12 01:13 | 只看該作者
    在實驗室呆了一天,看了Android的開發(fā)視頻教程,然后寫程序,改程序。
    今天粗略的學習了Activity的生命周期,還有Activity的布局。
    收獲:
    1.每一個控件的android:layout_width和android:layout_height都要設置,而且可以直接設置大小,不一定局限于給定的三個參數(shù),fill_parent、match_matchparent、wrap_content。
    2.通過findViewById(int)方法獲取控件的時候一定要注意是否已經(jīng)使用了setContentView()關(guān)聯(lián)了布局文件,而且只能獲取當前View的控件,否則就會得到了Null,然后后面再調(diào)用對象方法的時候就會出現(xiàn)錯誤。
    3.聲明周期函數(shù)OnStop()只有當一個Activity2完全遮擋住了Activity1的時候,才會調(diào)用Actitvity1的onStop()方法。
    4.對于字符資源最好統(tǒng)一的在res/values/strings.xml中定義,這樣如果更改字符資源的時候就可以牽一發(fā)動全身,不需要逐個的更改。
    5.建立工程文件的時候選擇的最低版本SDK會對代碼產(chǎn)生影響,因為有的API只能在高版本中使用!
    6.AndroidManifest.xml不可以更改名稱,每一個Activity都要在這個文件中進行注冊。而且在此文件中可以聲明哪個Activity為主窗口,住過設置了多個主窗口,安裝程序的時候就會分別產(chǎn)生相應的圖標。
    感想:難點不在于功能的代碼實現(xiàn),而在于布局XML文件的編寫,弄出來一個好看的界面真心不容易,可能是我還是菜鳥的原因吧,干什么都不容易。∠麓卧儆檬裁碅pp的時候別再噴了,其實做什么都是不容易的,尊重別人的勞動成果。
    下一步計劃:繼續(xù)學習XML文件布局,以及常用控件的使用,先把布局練習好,功能實現(xiàn)不急。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表