2012-04-11 77 views
0

我有一個非Activity類(我們稱之爲「NonActivity」),需要發佈消息並獲取用戶反饋。我有一個消息活動(MsgActivity)類來做到這一點。但是,只有活動類可以調用startActivityForResult()所以我做出NoActivity內部輔助類:ActivityNotFoundException調用內部類活動

// just to provide an Activity to launch MsgActivity 
    class ActivityMsgClass extends Activity { 

     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      Intent iMA = new Intent(this, MsgActivity.class); 
      iMA.putExtra("MsgText", mParams[0]); 
     ...blah blah ... 
      iMA.putExtra("ButtonCode", iBtns); 
      startActivityForResult(iMA,3);   
     }  
    } 

我的動態類是在清單正是如此宣稱:

<activity android:name="ActivityMsgClass" 
      android:configChanges="orientation" 
      android:screenOrientation="portrait" 
      android:launchMode="singleInstance"></activity> 

但是,當我嘗試調用它。 。 。

   Intent i = new Intent(ctx, ActivityMsgClass.class); 
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       ctx.startActivity(i); 

...我得到一個ActivityNotFound異常。我也嘗試過沒有FLAG_ACTIVITY_NEW_TASK,我也試着在清單限定名稱,例如,

<activity android:name=".NoActivity.ActivityMsgClass" 

。 。 。無濟於事。我究竟做錯了什麼?

在此先感謝。

回答

1

技術解決方案是在清單中指定完全限定的活動路徑。

實際的解決方案是避免這樣做。讓活動成爲公共班級,而不是內部班級,這只是不好的做法。

+0

如果我這樣做,在NonActivity和Activity類之間來回傳遞參數的最佳方式是什麼?我想要使​​用內部類的一個原因是它可以本地訪問NonActivity的變量。 – user316117 2012-04-11 17:59:51

+0

這取決於具體情況,但通常情況下,內部類不是處理活動時的解決方案。 – MByD 2012-04-11 18:01:23

+0

我同意 - 它讓我很尷尬地使用一個內部類,但是我受到如何來回傳遞數據的阻礙。靜態「全局」?你有什麼建議? – user316117 2012-04-11 18:26:19

0

在你manifeast文件更改像下面和嘗試...

<activity android:name=".ActivityMsgClass" 
      android:configChanges="orientation" 
      android:screenOrientation="portrait" 
      android:launchMode="singleInstance"></activity> 
<activity android:name=".MsgActivity" 
       android:configChanges="orientation" 
       android:screenOrientation="portrait" 
       android:launchMode="singleInstance"></activity> 
0

您的活動名稱聲明應以一段開始。用這種方式宣佈。

<activity android:name=".ActivityMsgClass" 
     android:configChanges="orientation" 
     android:screenOrientation="portrait" 
     android:launchMode="singleInstance"></activity> 

還確保活動MsgActivity也在清單中聲明。

+0

沒有任何數量的資格它有任何區別。我試過.ActivityMsgClass,NoActivity.ActivityMsgClass,.NoActivity.ActivityMsgClass和com.demo.test.NoActivity.ActivityMsgClass。我猜這或者與它是一個內部類有關,或者試圖從非Activity類啓動它。 – user316117 2012-04-11 18:20:20

+0

您是否還嘗試過使用$符號作爲清單中的活動名稱? 但我不明白你爲什麼需要這種方法?應該儘可能地避免內部活動。 如果你只是想訪問變量,那麼受保護的靜態變量將是一個更好的方法! – 2012-04-11 18:56:18