2012-04-11 15 views
0

私はメッセージを投稿してユーザからのフィードバックを得る非アクティビティクラス( "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クラスはthuslyマニフェストで宣言されています。

<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

技術的な解決策は、マニフェスト内の完全修飾パスを指定することです。

実際の解決方法はこれを避けることです。アクティビティを内部クラスではなく、パブリッククラスとしましょう。これは良いことではありません。以下のようなあなたのmanifeastファイルの変更で

+0

これを行うと、NonActivityクラスとActivityクラス間でパラメータを前後に渡す最善の方法は何ですか?私が内部クラスを使いたい理由の1つは、NonActivityの変数へのローカルアクセスがあったからです。 – user316117

+0

これはケースによって異なりますが、通常、アクティビティを処理する際の内部クラスは解決策ではありません。 – MByD

+0

私は同意する - それはまた、内部クラスを使用するために私を不愉快にしましたが、私はデータを前後に取得する方法によって邪魔されました。静的な「グローバル」?何を指示してるんですか? – user316117

0

としてみてください...

<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を試しました。私はこれを推測しているかどうかは、それが内部クラスであるかどうか、または非アクティビティクラスから起動しようとしていることです。 – user316117

+0

マニフェストのアクティビティ名に$表記を使ってみましたか? しかし、なぜ私はこのアプローチが必要なのですか?内部活動は可能な限り避けなければならない。 変数にアクセスしたいだけなら、保護された静的変数がより良いアプローチになります! –

関連する問題