0

Ich habe einfach 2 Registerkarten und Experience - Multiple Android Activities in a TabActivity als Referenz verwendet.
Meine Klasse Architektur ist wie folgt:
MainActivity erstreckt TabActivity
1. TabGroup1Activity erstreckt TabGroupActivity (TabGroupActivity-Klasse von oben Referenz implementiert)
1.I. Tab1Activity MapActivity erstreckt (die mehrere Marker hat)
2. TabGroup2Activity erstreckt TabGroupActivity
2.i Tab2ActivityKann keine neue Aktivität von alertdialog onclicklistener starten, wenn activitygroup verwendet wird

In der zweiten Registerkarte (Tab2Activity) zeige ich die Google Map, die mehrere Marker hat. Beim Taping des Markers zeigte ich den Alertdialog mit der Option Weitere Informationen an.
Beim Klicken auf die Option Weitere Informationen muss ich eine neue Aktivität starten, ohne die Tabs unten zu verlieren.

wo ist der Fehler, den ich nicht weiß ??

MapItemizedOverlay.java

public class InformationItemizedOverlay extends ItemizedOverlay<OverlayItem> { 
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
private Context mContext; 
Activity parentContext; 

public InformationItemizedOverlay(Drawable defaultMarker, Context context, 
     Activity parent) { 
    super(boundCenterBottom(defaultMarker)); 

    mContext = context; 
    parentContext = parent; 
} 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 

@Override 
protected OverlayItem createItem(int i) { 
    return mOverlays.get(i); 
} 

@Override 
public int size() { 
    return mOverlays.size(); 
} 

@Override 
protected boolean onTap(int index) { 

    OverlayItem item = mOverlays.get(index); 
    AlertDialog.Builder dialog = new AlertDialog.Builder(parentContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.setPositiveButton("More Info..", 
      new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        // TODO Auto-generated method stub 
        Intent test = new Intent(parentContext, 
          AboutActivity.class); 
        TabGroupActivity parentActivity = (TabGroupActivity) parentContext; 
        parentActivity 
          .startChildActivity("AboutActivity", test); 
       } 
      }); 
    dialog.show(); 
    return true; 

} 
} 

Wenn ich mit obigen Code versuchen, gibt Fehler, wenn ich die Schaltfläche Weitere Informationen auf Alertdialog klicken.
Wenn ich die Alertdialog entfernen und den folgenden Code schreiben, es funktioniert gut, eröffnet neue Aktivität in der gleichen Registerkarte:

@Override 
protected boolean onTap(int index) { 

    OverlayItem item = mOverlays.get(index); 

        Intent test = new Intent(parentContext, 
          AboutActivity.class); 
        TabGroupActivity parentActivity = (TabGroupActivity) parentContext; 
        parentActivity 
          .startChildActivity("AboutActivity", test); 
       } 
      }); 

    return true; 

} 

Wie kann ich es neue Aktivität öffnen funktioniert, wenn ich die Schaltfläche Weitere Informationen sind abrufbar unter Alarmdialog?
Hilfe !!

04-05 17: 42: 02,171: W/dalvikvm (2631): ThreadID = 1: Gewinde mit abgefangene Ausnahme verlass (group = 0x4001d800) 04-05 17: 42: 02,171: E/Android Runtime (2631): FATALE AUSNAHME: Haupt 04-05 17: 42: 02.171: E/AndroidRuntime (2631): java.lang.ClassCastException: com.bbs.MainActivity 04-05 17: 42: 02.171: E/AndroidRuntime (2631): at com.bbs1.InformationItemizedOverlay $ 1.onClick (InformationItemizedOverlay.java:63) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): um com.android.internal.app.AlertController $ ButtonHandler.handleMessage (AlertController.java:158) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): bei android.os.Handler.dispatchMessage (Handler.java:99) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): bei android.os.Looper.loop (Looper.java:123) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): um android.app.ActivityThread.main (ActivityThread.java:4627) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): at java.lang.reflect.Method.invokeNative (systemeigene Methode) 04-05 17 : 42: 02.171: E/AndroidRuntime (2631): at java.lang.reflect.Method.invoke (Methode.java:521) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): at com.android .internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 626) 04-05 17: 42: 02.171: E/AndroidRuntime (2631): at dalvik.system.NativeStart.main (Native Methode)

+0

können Sie die logcat Fehlerdetails – Nishant

+0

@Nishant senden nur mit logcat Fehler aktualisiert !! – captaindroid

+0

Was ist Zeile 63 in Ihrem Code? Die 'TabGroupActivity'-Besetzung? – 207

Antwort

0

Sie müssen die AlertDialogue unter current UI Thread ausführen. Verwenden Sie runOnUiThread() die Benutzeroberfläche Thread.Here zu starten ist das Beispiel:

runOnUiThread(new Runnable() { 
@Override 
public void run() { 
    AlertDialog.Builder dialog = new AlertDialog.Builder(parentContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.setPositiveButton("More Info..",new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
    // TODO Auto-generated method stub 
    Intent test = new Intent(parentContext,AboutActivity.class); 
    TabGroupActivity parentActivity = (TabGroupActivity) parentContext; 
    parentActivity.startChildActivity("AboutActivity", test); 
    } 
    }); 
    dialog.show(); 
}//run 
});//runOnUIThred 
+0

Wo ist die OnTap-Methode? – captaindroid

+0

Ich habe dir ein Beispiel geschickt. Du musst den Code innerhalb der onTap() Methode schreiben – Nishant

+0

ehh, ich werde es dann versuchen !! – captaindroid

Verwandte Themen