2011-04-30 116 views
2

我有一個活動將從父活動開始,但子活動的行爲將基於在父活動中單擊按鈕來確定。Android確定點擊哪個按鈕開始活動

我一直在試圖確定哪個button.onClick方法被調用來啓動子活動,但唉,我失敗了。

具體而言,我一直專注於使用ComponentName並將其展平爲一個字符串,但每次我嘗試這樣做時,都會得到一個空指針異常。

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.subactivity); 
     ComponentName callingActivity = SubActivity.this.getCallingActivity(); 
      TextView listtype = (TextView) findViewById(R.id.subactivity_listtype); 
     listtype.setText(callingActivity.flattenToString()); 

回答

5

您需要將Extras作爲一個自定義值來告訴您哪個按鈕啓動了該活動。這必須在呼叫活動中完成,而不是在新呼叫活動中完成。

下面是一個示例,可以幫助你

第一情境(可活動/服務等)

您有幾種選擇:

1)從Intent使用Bundle

Intent mIntent = new Intent(this, Example.class); 
Bundle extras = mIntent.getExtras(); 
extras.putString(key, value); 

2)創建一個新的包

Intent mIntent = new Intent(this, Example.class); 
Bundle mBundle = new Bundle(); 
mBundle.extras.putString(key, value); 
mIntent.putExtras(mBundle); 

3)使用意圖

putExtra()快捷方法
Intent mIntent = new Intent(this, Example.class); 
mIntent.putExtra(key, value); 

新語境(可以是活動/服務等)

Intent myIntent = getIntent(); // this getter is just for example purpose, can differ 
if (myIntent !=null && myIntent.getExtras()!=null) 
    String value = myIntent.getExtras().getString(key); 
} 

注:束具有「獲取「和」放入「所有基本類型,Parcelables和Serializables的方法。我只是將Strings用於示範目的。

0

您是如何從第一個開始第二個活動的?確保您使用的是startActivityForResult,而不是startActivity,否則getCallingActivity()將始終爲空。從Android Developer Docs

注:如果調用活動不期望的結果(即它沒有使用startActivityForResult(意向,INT)形式包括請求代碼),然後調用包將爲空。

你的意圖調用應該是這個樣子:

Intent myIntent = new Intent(this, ActivityTwo.class); 
startActivityForResult(myIntent, 0); 

一種不同的方式來完成,這是通過把一個「額外」(與代表哪個按鈕被按下的值)到意向你」重新使用開始你的第二個活動。

相關問題