2014-04-15 54 views
0

如何從1類方法傳遞值到另一個班級活動的Android/Java的獲得價值從其他類方法

強大的文本

public class A extends Activity{ 
    int value; 

    protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
     . 
     . 
     . 
    methodA(); 
    } 

    public void methodA(){ 

     if (condition){ 
      value =1 
     } 
     else if (condition){ 
      value =2 
      } 
     else{ 
      value =3 
      } 
     } 

     } 
     } 

B類

Public class B extends Activity{ 

    protected void onCreate(Bundle savedInstanceState){ 
     int val; 
     super.onCreate(savedInstanceState); 
     . 
     . 
    //how do we can get val = value 
    } 

} 

問題是B級的val如何得到A級的value,將意圖爲這些條件工作?

+0

可能您正在尋找http://stackoverflow.com/questions/3510649/how-to-pass-a-value-from-one-activity-to-another-in-android – guptakvgaurav

+0

http:// stackoverflow。 com/questions/2906925/android-how-do-i-pass-an-object-from-one-activity-to-another – Maxime

回答

0

有幾種選擇來傳遞值。然而,在我的私人觀點中,傳遞整數並不是最佳模式。我曾經創建類前。稱之爲ContainerWithData,它實現了可序列化的(可能是Parcalable)。我更喜歡第一個,因爲它可以用於像Gson之類的其他庫,用於api發送或映射器轉換。

Class Aa extends Activity { 

    public initAndRunBeAcitvity(int parameterInt){ 
     ContainerWithData data = new ContainerWithData(); 
     data.setIntegerValue(parameterInt); 
     runBe(data); 
    } 

    public void runBe(ContainerWithData data){ 
     Intent intent = new Intent(Aa.this,Be.class); 
     intent.putExtra("MyBeData",data); 
     startActivity(intent); 
    } 

} 

Class Be extends Activity { 

    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     prepareInitParameters(); 
    } 

    private void prepareInitParameters(){ 
    getInitParameters(); 
    checkInitParameters(); 
    } 

    private void getInitParameters(){ 
    ContainerWithData value = getIntent().getSerializableExtra("MyBeData"); 
    this.value = value; 
    } 


    private void checkInitParameters(){ 
     if (value==null){ 
       //Perform any initialization data, 
       //message or postDelayed closing of activity 
     } 
    } 


} 

Class ContainerWithData implements Serializable { 

    @Getter 
    @Setter 
    private Integer integerValue; 
    //can be null if not setted, 
    //so should be checked by if conditions later on controller of view logic 

} 

所以命題是用

getIntent()getSerializableExtra( 「MyBData」);

getIntent()getSerializableExtra( 「MyBData」); 連同使用模型傳遞數據。

有了這樣的模式很多時候我不得不避免花更多的時間來爲應用程序的增長添加新值。

+0

我認爲這是我尋找讓我先試試:) – JohnaHalim

+0

@ user2930725 parcelable比序列化要好。如果您傳遞的是原始數據類型,則不需要序列化 – Raghunandan

+0

您應該始終考慮放置可序列化數據而不是促銷數據,請記住稍後通過添加一些額外的值來擴展它會更簡單。 – elektronika

0

用於此目的

public void methodA(){ 

    if (condition){ 
     value =1 
    } 
    else if (condition){ 
     value =2 
     } 
    else{ 
     value =3 
     } 
     Intent intent = new Intent(this,B.class); 
     intent.putExtra("key",value); 
     startActivity(intent); 
    } 

使用意圖然後

Public class B extends Activity{ 
protected void onCreate(Bundle savedInstanceState){ 
    int val; 
    super.onCreate(savedInstanceState); 
    int value = getIntent().getIntExtra("key",0); 
    . 
+0

我已經試過這個,它不工作,它給出默認值= 0它不會去B類值的值。 – JohnaHalim

+0

@ user2930725然後值不正確發送coz'getIntExtra(「key」,0);'默認爲0 – Raghunandan

0

當開始你的活動B可以與意圖送價值。

在A(起始時B):

Intent intent = new Intent(A.this, B.class); 
intent.putExtra("MYVALUE", val); 
startActivity(intent); 

在B:

val = getIntent().getIntExtra("MYVALUE");