ActivityNotFoundException调用内部类活动

时间:2012-04-11 17:29:51

标签: android

我有一个非活动类(我们称之为“NonActivity”),需要发布消息并获得用户反馈。我有一个消息活动(MsgActivity)类来执行此操作。但只有Activity类可以调用 startActivityForResult(),所以我在NoActivity中创建了一个内部帮助器类:

  // 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类在Manifest中声明:

<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"

。 。 。无济于事。我做错了什么?

提前致谢。

3 个答案:

答案 0 :(得分:1)

技术解决方案是在清单中指定完全限定的活动路径。

实际的解决方案是避免这样做。让活动成为公共课,而不是内部阶级,这不是一个好习惯。

答案 1 :(得分: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>

答案 2 :(得分:0)

您的活动名称声明应以句点开头。以这种方式宣布。

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

还要确保活动MsgActivity也在清单中声明。