0

私は単に 2 つのタブを持っていて、TabActivity 内のエクスペリエンス - 複数の Android アクティビティを参照として使用しました。
私のクラスのアーキテクチャは次のようなものです:
MainActivity は TabActivity拡張 し
ます Tab1Activityは MapActivity (複数のマーカーを持つ) 2を拡張します。TabGroup2Activity は TabGroupActivity 2.iを拡張します。Tab2Activity


2 番目のタブ (Tab2Activity) では、複数のマーカーを持つ Google マップを表示します。マーカーをテーピングすると、アラートダイアログが表示され、[詳細情報] オプションが表示されました。
詳細情報オプションをクリックすると、下部のタブを失うことなく新しいアクティビティを開始する必要があります。

私が知らないエラーはどこですか??

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;

}
}

上記のコードを試してみると、アラートダイアログで詳細情報ボタンをクリックするとエラーが発生します。
alertdialog を削除して次のコードを記述すると、正常に動作し、同じタブで新しいアクティビティが開きます。

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

}

alertdialog で [詳細情報] ボタンをクリックしたときに新しいアクティビティを開くにはどうすればよいですか??
ヘルプ !!

04-05 17:42:02.171: W/dalvikvm(2631): threadid=1: キャッチされない例外で終了するスレッド (group=0x4001d800) 04-05 17:42:02.171: E/AndroidRuntime(2631): 致命的な例外: メイン04-05 17:42:02.171: E/AndroidRuntime(2631): java.lang.ClassCastException: com.bbs.MainActivity 04-05 17:42:02.171: E/AndroidRuntime(2631): com.bbs1.InformationItemizedOverlay$1 で.onClick(InformationItemizedOverlay.java:63) 04-05 17:42:02.171: E/AndroidRuntime(2631): com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 04-05 17 :42:02.171: E/AndroidRuntime(2631): android.os.Handler.dispatchMessage(Handler.java:99) 04-05 17:42:02.171: E/AndroidRuntime(2631): android.os.Looper で。ループ (Looper.java:123) 04-05 17:42:02.171: E/AndroidRuntime(2631): android.app.ActivityThread.main(ActivityThread.java:4627) 04-05 17:42:02.171: E/AndroidRuntime(2631): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 04-05 17:42:02.171: E/AndroidRuntime(2631): Java で.lang.reflect.Method.invoke(Method.java:521) 04-05 17:42:02.171: E/AndroidRuntime(2631): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 868) 04-05 17:42:02.171: E/AndroidRuntime (2631): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 04-05 17:42:02.171: E/AndroidRuntime ( 2631): dalvik.system.NativeStart.main(ネイティブ メソッド) でZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 04-05 17:42:02.171: E/AndroidRuntime(2631): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 04-05 17:42:02.171: E/AndroidRuntime(2631): dalvik.system.NativeStart.main(ネイティブメソッド)ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 04-05 17:42:02.171: E/AndroidRuntime(2631): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 04-05 17:42:02.171: E/AndroidRuntime(2631): dalvik.system.NativeStart.main(ネイティブメソッド)

4

1 に答える 1

0

AlertDialogueonを実行する必要がありますcurrent UI ThreadrunOnUiThread()UI スレッドを開始するために使用します。例を次に示します。

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
于 2012-04-05T12:11:59.737 に答える