2012-04-05 143 views
0

我只有2個選項卡,並使用Experience - Multiple Android Activities in a TabActivity作爲參考。
我類體系結構是這樣的:
MainActivity延伸TabActivity
1. TabGroup1Activity延伸TabGroupActivity(從上面參考實施TabGroupActivity級)
1.i. Tab1Activity延伸MapActivity(其具有多個標記物)
2. TabGroup2Activity延伸TabGroupActivity
2.i. Tab2Activity使用活動組時,無法從alertdialog onclicklistener啓動新活動

在第二個選項卡(Tab2Activity)我顯示有多個標記的谷歌地圖。在貼上標記時,我用更多信息選項顯示了alertdialog。
點擊更多信息選項,我必須開始新的活動,而不會失去底部的標籤。

哪裏是我不知道的錯誤?

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點擊More Info按鈕給人。

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

} 

我怎樣才能使它發揮作用開闢新的活動時,我點擊More Info按鈕:
當我刪除alertdialog和寫下面的代碼,它工作正常,在同一個選項卡中打開新的活動alertdialog ??
幫助!!

04-05 17:42:02.171:W/dalvikvm(2631):線程ID = 1:螺紋與未捕獲的異常退出(組= 0x4001d800) 04-05 17:42:02.171:E/AndroidRuntime( 2631):FATAL EXCEPTION:main 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):at com.android.internal.app.AlertController $ ButtonHandler.handleMessage( AlertController.java:158) 04-05 17:42:02.171:E/AndroidRuntime(2631):at android.os.Handler.dispatchMessage(Handler.java:99) 04-05 17:42:02.171:E/AndroidRuntime(2631):at android.os.Looper.loop(Looper.java:123) 04-05 17:42:02.171:E/AndroidRuntime(2631):at android.app.ActivityThread.main(ActivityThread.java:4627) 04-05 17:42:02.171:E/AndroidRuntime(2631):at java.lang.reflect.Method.invokeNative(Native Method) 04-05 17 :42:02.171:E/AndroidRuntime(2631):at java.lang.reflect.Method.invoke(Method.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):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java :626) 04-05 17:42:02.171:E/AndroidRuntime(2631):at dalvik.system.NativeStart。主(本機方法)

+0

您可以發送logcat的錯誤細節 – Nishant 2012-04-05 11:42:25

+0

@Nishant剛剛更新與logcat的錯誤! – captaindroid 2012-04-05 11:56:24

+0

代碼中的第63行是什麼? 「TabGroupActivity」強制轉換? – 207 2012-04-05 12:09:54

回答

0

您必須運行AlertDialogue on current UI Thread。使用runOnUiThread()啓動UI Thread.Here是例如:

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

onTap方法在哪裏? – captaindroid 2012-04-05 12:22:11

+0

我給你一個例子。你必須在onTap()方法內編寫代碼 – Nishant 2012-04-05 12:23:55

+0

呃,那我就試試吧! – captaindroid 2012-04-05 12:26:17