2012-06-11 54 views
0

可能重複:
Passing data between activities in Android如何共享類之間的變量在Java中

所以我有兩個活動的,我需要保存在第一個活動一個變量,並使用它在第二項活動。誰能幫我?謝謝!

+5

那麼,你到目前爲止嘗試過什麼? –

+1

您是否使用'startActivity(intent)'''Intent'方法開始第二個活動如果是,請參考這些[Data Passing](http://stackoverflow.com/q/2091465/940096)和[Passing Data]( http://stackoverflow.com/questions/2965109/passing-data-between-activities-in-android) – Praveenkumar

+2

我不明白爲什麼人們在這種情況下給出'putExtra'和'getExtra'的例子,當通過'getters'和'objects'訪問變量是應該鼓勵更多的東西。 –

回答

0

下面是做這件事的一種方式,我想:

class Class1 { 
    private int someValue = 0 
    void doSomething(Class2 anotherObj) { 
     this.someValue = 1; 
     anotherObj.setValue(this.someValue); 
    } 
} 

還有許多其他的方法:)

1

第一項活動:

.... 
    Intent intent = new Intent(this, SecondActivity.class); 
    intent.putExtra(Consts.EXTRA_EDIT_MODE_KEY, 123); 
    .... 
    intent.putExtra(_some_key_, _some_data_); 
    intent.putExtra(_some_key_, _some_data_); 
    startActivity(intent); 

SecondActivity:

..... 
    Intent intent = getIntent(); 
    int mode = intent.getIntExtra(Consts.EXTRA_EDIT_MODE_KEY, -1); 
    ...... 
0

您可以 使用intent.putExtra(yourData)將第一個活動數據傳遞給第二個活動;

1

保持簡單。在一個類中,您可以在其他類中使用該類的實例來設置該變量的值,以獲取它。

public class Activity1 {  

    private String var; 

    public Activity1() { 
     setVar("some_value"); 
    } 

    public String getVar() { 
     return this.var; 
    } 

    public void setVar(String var) { 
     this.var = var; 
    } 
} 

public class Activity2 { 
    public void doSmth() { 
     Activity1 a = new Activity1(); 
     String varValue = a.getVar(); 

    } 
} 
+0

這是正確的答案。如果問題是「我怎樣才能打開一個從調用者接收var的活動」,這可以通過捆綁來解決。但是讓我們假設你有一個帶有一些按鈕(activity1)的圖層,中間是一個帶有自定義視圖(actvity2)的框架,並且你想要SHARE值:按鈕上的clic按鈕來改變顏色(activity1中的按鈕)並繪製在活動2中這種顏色,保利斯的答案是最好的。你可以使用static,因爲第二個活動中var的內容將不會被刷新,當你在第一個活動中改變時。 – Peter

+0

只是一個細節:我說你不能'使用靜態,意思是你不能'只是設置一個var作爲靜態在activ1和只讀是「靜態」在activ2。看起來你總是需要從activ1那裏得到所有者的價值。 – Peter

3

使用這樣的事情:

Intent intent = new Intent(this, ClassImCalling.class); 
    intent.putExtra("variable", myvariable); 
    startActivityForResult(intent, int_identifier); 

而在其他活動:

intent = getIntent(); 
    var=intent.getStringExtra("variable"); 

要返回給調用它(意圖是一樣getIntent()以上)的活動:

setResult(RESULT_OK, intent); 
    finish(); 

而且當您返回到第一個活動時:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == int_identifier) { 
     if (resultCode == RESULT_OK) { 
      Do suff 
     }else if(resultCode == RESULT_CANCELED){ 
      Action was cancelled :(
     } 
    } 
} 
1

根據您的要求,在多個活動類中使用變量值。因爲他們的意思是他們是JAVA類,所以你可以爲你的任務使用一個靜態變量。

說你有一個這樣的類,

public class Activity1 extends Activity{ 
static String name="abc"; 
} 

如果你想使用這個名字的變量在其他類,你可以使用,

public class Activity2 extends Activity{ 
String name2=Activity1.name; 
} 
+0

不要工作。事實上,如果您更改第一個活動中的值,則更改不會反映在第二個活動中。唯一的辦法似乎是在第一個活動中「問」這個價值,就像在Paulius的答案中一樣 – Peter

0

充分利用靜態變量,因爲它是由所有班級共享。

0

如果我們使用共享首選,我們可以在任何活動中使用此值。

這裏是ManageSharesPrefs的代碼:

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
     SharedPreferences.Editor prefsEditor = myPrefs.edit(); 
     prefsEditor.putString(MY_NAME, "Sai"); 
     prefsEditor.putString(MY_WALLPAPER, "f664.PNG"); 
     prefsEditor.commit(); 

和retrive值作爲

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE); 
     String prefName = myPrefs.getString(MY_NAME, "nothing"); 
     String wallPaper = myPrefs.getString(MY_WALLPAPER, null); 
0

可以使用Bundle對象跨越2個活動共享的變量。這是我如何使用它:

(1)首先,將變量作爲一個額外的東西放入一個包中。假設你有FirstActivity變量,你想將它發送到SecondActivity,那麼這是把它(在FirstActivity)的方式:

 String variableValue="x"; // it holds some value which you want to pass to SecondActivity. 
     Intent secondIntent = new Intent(view.getContext(), SecondActivity.class); 
     Bundle bundleObj = new Bundle(); 
     bundleObj.putString("variableName", variableValue); 
     secondIntent.putExtras(bundleObj); 
     startActivityForResult(secondIntent, 0); 

(2)這是我們如何得到它的SecondActivity(在onCreate()方法中):

 Bundle extras = getIntent().getExtras(); 
     String variableValue = extras.getString("variableName"); 

** Similarly you can pass the integer and other datatyped values as well.