Autore Topic: Intent per far partire una " inner class " activity  (Letto 1064 volte)

Offline Gioce90

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Intent per far partire una " inner class " activity
« il: 22 Settembre 2012, 11:40:28 CEST »
0
Premesso che ho già cercato la soluzione nel forum e in altri siti (forse sbaglio cosa cercare) ma, come da titolo, mi trovo nella seguente situazione (riassunta):

Codice (Java): [Seleziona]
public class MainActivity extends Activity{
        //... bla bla
        @Override
             protected void onPrepareDialog(int id, Dialog dialog) {
                switch (id) {
                case 1:
                        {
                                // bla bla bla..
                               
                                Intent intent = new Intent(this, MyInnerClassActivity.class);  // mmm... fin qui non da errori
                                startActivity(intent); // qui da l'errore
                         }
                }
           } // chiudo onPrepareDialog

           public class MyInnerClassActivity extends Activity{
              // per ora è vuota
          } chiudo MyInnerClassActivity

} chiudo MainActivity


Nel manifesto:

Codice: [Seleziona]
<application
        BLA BLA BLA
       
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
       
        <activity android:name=".MyInnerClassActivity"></activity>
       

Mi viene da pensare che non trovail file .class... Qualcuno ha suggerimenti?

Ah questo è il logCat:

Codice: [Seleziona]
09-22 09:39:18.525: E/AndroidRuntime(1861): FATAL EXCEPTION: main
09-22 09:39:18.525: E/AndroidRuntime(1861): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.uni.adisys.client/com.uni.adisys.client.MainActivity$ManageActivity}; have you declared this activity in your AndroidManifest.xml?
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1404)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Activity.startActivityForResult(Activity.java:2817)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Activity.startActivity(Activity.java:2923)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at com.uni.adisys.client.MainActivity.onPrepareDialog(MainActivity.java:326)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Activity.onPrepareDialog(Activity.java:2505)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Activity.showDialog(Activity.java:2555)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.Activity.showDialog(Activity.java:2514)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at com.uni.adisys.client.MainActivity.viewIntervento(MainActivity.java:189)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at com.uni.adisys.client.MainActivity$6.onItemClick(MainActivity.java:151)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.widget.AdapterView.performItemClick(AdapterView.java:284)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.widget.ListView.performItemClick(ListView.java:3382)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.os.Handler.handleCallback(Handler.java:587)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.os.Handler.dispatchMessage(Handler.java:92)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.os.Looper.loop(Looper.java:123)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at android.app.ActivityThread.main(ActivityThread.java:4627)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at java.lang.reflect.Method.invokeNative(Native Method)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at java.lang.reflect.Method.invoke(Method.java:521)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-22 09:39:18.525: E/AndroidRuntime(1861):         at dalvik.system.NativeStart.main(Native Method)

Android 2.2
Java 6.
« Ultima modifica: 22 Settembre 2012, 11:44:41 CEST da Gioce90 »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Intent per far partire una " inner class " activity
« Risposta #1 il: 22 Settembre 2012, 12:22:57 CEST »
+1
Non puoi creare un Activity in quel modo. Le Activity di Android posso essere create solo rispettando le regole descritte nella documentazione ufficiale.

Il motivo dell'errore riguarda gli aspetti tecnici su come Java gestisce le inner class NON STATICHE. Consiglio di leggere con attenzione la documentazione sulle inner class:

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

adb logcat | tee /tmp/logcat | grep TAG

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Intent per far partire una " inner class " activity
« Risposta #2 il: 22 Settembre 2012, 13:06:33 CEST »
+1
Iceweasel ha ragione.

Fondamentalmente te la dichiari static e nel manifest ci metti

Codice (XML): [Seleziona]
<activity android:name=".MainActivity$MyInnerClassActivity" />
 ;-)

Offline Gioce90

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Intent per far partire una " inner class " activity
« Risposta #3 il: 22 Settembre 2012, 16:20:02 CEST »
0
ah ho capito :) grazie molte!