2012-04-11 5 views
0

Ich habe eine Nicht-Activity-Klasse (nennen wir es "NonActivity"), die eine Nachricht senden und Benutzerfeedback erhalten muss. Ich habe eine Nachrichtenaktivität (MsgActivity) Klasse, um dies zu tun. Aber nur Aktivitätsklassen können startActivityForResult() aufrufen so machte ich eine innere Hilfsklasse in NoActivity:ActivityNotFoundException Aufruf einer Aktivität innerer Klasse

// 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);   
     }  
    } 

Meine Aktivitätsklasse ist thusly im Manifest erklärt:

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

Aber wenn ich versuche, Rufen Sie es auf. . .

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

... Ich bekomme eine ActivityNotFound-Ausnahme. Ich habe versucht, es auch ohne FLAG_ACTIVITY_NEW_TASK, und ich habe auch versucht, den Namen im Manifest der Qualifikation, zum Beispiel

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

. . . umsonst. Was mache ich falsch?

Vielen Dank im Voraus.

Antwort

1

Die technische Lösung besteht darin, den vollständig qualifizierten Aktivitätspfad im Manifest anzugeben.

Die tatsächliche Lösung ist, dies zu vermeiden. Lassen Sie Aktivität eine öffentliche Klasse sein, und nicht eine innere Klasse, das ist einfach keine gute Übung.

+0

Wenn ich das tue, was ist der beste Weg, um die Parameter zwischen den NonActivity und Activity-Klassen hin und her zu übergeben? Ein Grund, warum ich eine innere Klasse verwenden wollte, war der lokale Zugriff auf die Variablen von NonActivity. – user316117

+0

Es hängt vom Fall ab, aber normalerweise ist die innere Klasse nicht die Lösung beim Arbeiten mit Aktivitäten. – MByD

+0

Ich stimme zu - es machte mir auch mulmig, eine innere Klasse zu benutzen, aber ich wurde davon abgehalten, die Daten hin und her zu bekommen. Statische "Globale"? Was schlagen Sie vor? – user316117

0

In Ihrer manifeast Datei ändern wie unten und versucht ...

<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

Ihre Aktivität Namenserklärung sollte mit einem Punkt beginnen. erkläre es so.

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

auch sicherstellen, dass die Aktivität MsgActivity auch im Manifest deklariert wird.

+0

Keine Qualifizierung macht einen Unterschied. Ich habe versucht .ActivityMsgClass, NoActivity.ActivityMsgClass, .NoActivity.ActivityMsgClass und com.demo.test.NoActivity.ActivityMsgClass. Ich vermute, das hat entweder etwas damit zu tun, dass es eine innere Klasse ist, oder es aus einer Nicht-Aktivitätsklasse zu starten. – user316117

+0

Haben Sie auch versucht, die $ -Notation für den Aktivitätsnamen im Manifest zu verwenden? aber ich verstehe nicht, warum Sie diesen Ansatz brauchen? Innere Aktivitäten sollten so weit wie möglich vermieden werden. Wenn Sie nur auf Variablen zugreifen möchten, dann wären geschützte statische Variablen ein besserer Ansatz! –

Verwandte Themen