2012-07-04 161 views
0

我可以在我的第一個活動中初始化對象並且它在所有活動中都可以嗎?將對象傳遞給活動

public class Calc{ 
    int x; 
    int y; 
    public Calc(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 
    public int sum() { 
     return x + y; 
    } 
} 
public class MainActivity extends Activity { 

private int progressStatus = 0; 
private Handler handler = new Handler(); 
private ProgressBar loading; 
private static int progress; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    Calc c = new Calc(3, 4); 
} 
} 


public class PreviewActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.preview); 

      TextView txt = (TextView) findViewById(R.id.txt); 
      txt.setText(Integer.toString(c.sum)); 
} 
} 

如何初始化MainActivity中的Calc對象並使用它PreviewActivity。

我如何可以將它傳遞到另一個活動或我怎麼能使其與其他活動分享

+0

爲什麼不直接在PreviewActivity中發送Calc的總和? – user370305

回答

2

使用Application類,並保持你的在你需要的這個類中的對象Activities

class MyApplication extends Application{ 
    Object a; 

    public void setA(Object a){ 
     this.a = a; 
    } 

    public Object getA(){ 
     return a; 
    } 

} 

現在讓我們假設在您的A活動中創建類Object的對象,並且希望在您的B活動中使用它。

做這種方式,

class ActivityA extends Activity(){ 

... 
// some where in activity, set your object this way. 
    Object aObj = new Object(); 
    ((MyApplication)getApplication()).setA(aObj); 


... 

} 

class ActivityB extends Activity(){ 

... 
// some where in activity, get your object this way. 
    Object aObj = ((MyApplication)getApplication()).getA(); 


... 

} 

你需要告訴你的androidManifest.xml你的擴展Application類。

1

我如何可以將它傳遞到另一個活動或我怎麼能使其與其他 活動分享

只需使用意圖這樣:

intent.putExtra("calc" new Calc(3, 4)); 

傳遞這種Object當你想開始另一個Activity

然後在你的第二Activity只要致電:

Calc c = getIntent().getParcelableExtra("calc"); // getSerializableExtra("calc"); 

而且你Calc類必須實現ParcelableSerializable

public class Calc implements Parcelable { 
... 
} 
+1

這不會自行工作。你需要'Calc'實現'Parcelable'或者'Serializable'才能工作。 –

+0

沒有人,它的工作原理,我在我的應用程序工作。 – Sajmon

+0

Calc應該實現'Serializable'來將它傳遞給Intents –

2

使

public class Calc implements Serializable { 
int x; 
int y; 
public Calc(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 
public int sum() { 
    return x + y; 
} 

}

當您啓動PreviewActivity

Intent intent = new Intent(mContext, PreviewActivity .class); 
intent.putParcelableArrayListExtra("data",c); 
startActivity(intent); 

,並在您PreviewActivity 通過擴展,並編寫自定義Application類做到這一點

Calc c=(Calc) getIntent().getSerializableExtra("data"); 
相關問題