2011-02-09 52 views
29

假設我有一個first.java(活動類)類,並且我在這個類中啓動了另一個活動(second.java - 活動類)。我如何從second.java訪問first.java的實例?有人可以給我一個很好的解釋..一個例子將是偉大的...訪問父活動的實例?

回答

-2

試試這個,如果這項工作4你.........
這樣的事情.....

class first 
{ 
public static first instance; 
oncreate() 
{ 
instance=this; 
} 

public static getInstance() 
{ 
return instance; 
} 

}

從第二現在

級呼叫first.getInstance();

你也可以直接接取例如在這樣first.instance靜態的方式.......
謝謝...

+0

這個我覺得是一個正確的答案 – Javanator 2011-02-09 12:47:11

+4

請記住,只要該類存在於jvm中,靜態引用就存在。因此,如果將Activity設置爲靜態變量,即使Activity已經運行onDestroy方法,也可能會遇到內存問題。 – 2011-02-09 12:49:45

+1

我覺得它看起來很尷尬。單身並不總是好的。 – Cristian 2011-02-09 12:49:57

38

如果你需要你的第二個活動,一些數據返回給你的第一個活動我建議您使用startActivityForResult()開始第二個活動。然後在第一個活動中的onResult()中,您可以完成所需的工作。

在First.java你開始Second.java:

Intent intent = new Intent(this, Second.class); 
int requestCode = 1; // Or some number you choose 
startActivityForResult(intent, requestCode); 

結果方法:

protected void onActivityResult (int requestCode, int resultCode, Intent data) { 
    // Collect data from the intent and use it 
    String value = data.getString("someValue"); 
} 

在Second.java:

Intent intent = new Intent(); 
intent.putExtra("someValue", "data"); 
setResult(RESULT_OK, intent); 
finish(); 

如果您不希望在第一項活動中做一些工作之前等待第二項活動結束,您可以發送第一項活動活動對此作出反應。

編輯:

如果您需要訪問一些價值你的第一個活動,而製作的靜態引用它,你可以考慮把在你的ActivityGroup活動。

因此,ActivityGroup啓動第一個活動。然後第一個活動使用ActivityGroup來啓動第二個活動。然後,您將通過在第二個活動中調用getParent()來訪問第一個活動。

class MyActivityGroup extends ActivityGroup { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    startChildActivity("first", new Intent(this, First.class)); 
    } 
    public void startChildActivity(Intent intent) { 
    Window window = getLocalActivityManager().startActivity(id, intent); 
     if (window != null) { 
     setContentView(window.getDecorView()); 
    } 
    } 
} 

在First.class:

Intent = new Intent(this, Second.class); 
((MyActivityGroup) getParent()).startChildActivity("second", intent); 

在Second.class:

Activity first = (First) getParent(); 
-1

您不能直接創建活動。 在第一個活動需要一個靜態變量的活動像這樣,

public static Activity activity; 

在OnCreate做到這一點。

activity = this; 

然後在第二個活動做到這一點,

Activity activity = (your activity name).activity; 

編輯: 對於從一個活動將數據傳遞到其他活動,這是沒有辦法的辦法。 以上答案是從最初被問到的其他活動中獲取活動實例。

要將數據從一個活動傳遞到其他活動通常使用包。但是,如果數據不是原始數據類型,那麼使用應實現parcelable或serializable接口的對象類。然後通過捆綁只能可以通過的對象列表對象。

3

只有這應該工作

class first 
{ 
    public static first instance; 
    oncreate() 
    { 
     instance = this; 
    } 
} 

first.instance是從第二類

6

你可以簡單地調用從兒童活動getParent()訪問所需要的東西。

我不知道爲什麼其他答案如此複雜。