Android ActivityNotFoundException调用内部类活动

Android ActivityNotFoundException调用内部类活动,android,Android,我有一个非活动类(我们称之为“非活动”),需要发布消息并获取用户反馈。我有一个消息活动(MsgActivity)类来完成这项工作。但是只有活动类可以调用startActivityForResult(),所以我在NoActivity中创建了一个内部帮助器类: // just to provide an Activity to launch MsgActivity class ActivityMsgClass extends Activity { public void

我有一个非活动类(我们称之为“非活动”),需要发布消息并获取用户反馈。我有一个消息活动(MsgActivity)类来完成这项工作。但是只有活动类可以调用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 android:name="ActivityMsgClass"
          android:configChanges="orientation"
          android:screenOrientation="portrait"
          android:launchMode="singleInstance"></activity>
。。。我得到一个ActivityNotFound异常。我也尝试过不使用FLAG_ACTIVITY_NEW_任务,也尝试过在清单中限定名称,例如

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

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


实际的解决办法是避免这样做。让activity成为一个公共类,而不是一个内部类,这不是一个好的做法。

在Manifeat文件中,按如下所示进行更改,然后尝试

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

您的活动名称声明应以句点开头。这样说吧

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


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

如果这样做,在非活动类和活动类之间来回传递参数的最佳方式是什么?我想使用内部类的一个原因是,它可以本地访问非活动的变量。这取决于具体情况,但通常情况下,在处理活动时,内部类不是解决方案。我同意-使用内部类也会让我感到不安,但我被如何来回获取数据所困扰。静态“全局”?你有什么建议?同样,这取决于你的需要。如果你想使用globals,可以通过扩展
应用程序
来实现。我做了一个单独的活动,并使用globals进行参数传递(糟糕)。再多的限定也没有什么区别。我试过.ActivityMsgClass、NoActivity.ActivityMsgClass、NoActivity.ActivityMsgClass和com.demo.test.NoActivity.ActivityMsgClass。我猜这要么与它是一个内部类有关,要么与它试图从非活动类启动有关。您是否也尝试过在清单中使用$notation作为活动名称?但我不明白你为什么需要这种方法?应尽可能避免内部活动。如果您只想访问变量,那么受保护的静态变量将是更好的方法!
<activity android:name=".ActivityMsgClass"
      android:configChanges="orientation"
      android:screenOrientation="portrait"
      android:launchMode="singleInstance"></activity>