2012-04-11 7 views
0

메시지를 게시하고 사용자 의견을 얻어야하는 비 활동 클래스 ("NonActivity"라고합시다)가 있습니다. 이 작업을 수행하려면 메시지 작업 (MsgActivity) 클래스가 있어야합니다. 하지만 활동 클래스는 그래서 난 NoActivity에서 내부 헬퍼 클래스를 만들어 에 startActivityForResult()를 호출 할 수 있습니다ActivityNotFoundException 내부 클래스 활동 호출

내 활동 클래스는 thusly 히 매니페스트에 선언
// 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

기술 솔루션은 매니페스트에서 정규화 된 활동 경로를 지정하는 것입니다.

실제 해결책은이 작업을 피하는 것입니다. 활동을 내부 수업이 아닌 공개 수업이라고합시다. 이것은 좋은 습관이 아닙니다. 아래의 시도처럼 manifeast 파일 변경에

+0

내가 그런 경우 NonActivity 클래스와 Activity 클래스 사이에서 매개 변수를 앞뒤로 전달하는 가장 좋은 방법은 무엇입니까? 내부 클래스를 사용하려는 이유 중 하나는 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

어떤 차이가 있는지에 대한 자격이 없습니다. 나는 시도했다. 액티비티 메시 클래스, NoActivity.ActivityMsgClass, .NoActivity.ActivityMsgClass, com.demo.test.NoActivity.ActivityMsgClass. 나는 이것이 내부 클래스이거나, Activity 클래스가 아닌 클래스에서 시작하려고하는 것과 관련이 있다고 생각한다. – user316117

+0

또한 매니페스트의 액티비티 이름에 $ 표기법을 사용해 보셨습니까? 하지만이 방법이 필요한 이유는 무엇입니까? 내부 활동은 가능한 한 피해야합니다. 방금 ​​변수에 액세스하려면 보호 된 정적 변수가 더 나은 접근 방법입니다! –