【问题标题】:Can not start new activity from alertdialog onclicklistener when activitygroup is used使用活动组时,无法从 alertdialog onclicklistener 开始新活动
【发布时间】:2012-04-05 11:23:50
【问题描述】:

我只有 2 个标签,并使用 Experience - Multiple Android Activities in a TabActivity 作为参考。
我的班级架构是这样的:
MainActivity extends TabActivity
1.TabGroup1Activity扩展了TabGroupActivity(TabGroupActivity-class实现自上述参考)
1.i。 Tab1Activity 扩展了 MapActivity(具有多个标记)
2.TabGroup2Activity 扩展 TabGroupActivity
2.i。 Tab2Activity

在第二个选项卡 (Tab2Activity) 中,我显示了具有多个标记的谷歌地图。在点击标记时,我显示了带有更多信息选项的警报对话框。
Onclicking 更多信息选项我必须开始新活动而不会丢失底部的标签。

我不知道的错误在哪里??

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;

}
}

当我尝试使用上述代码时,当我单击警报对话框中的更多信息按钮时会出现错误。
当我删除警报对话框并编写以下代码时,它工作正常,在同一选项卡中打开新活动:

@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): at 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.loop(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(Native Method) 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): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 能否发送logcat错误详情
  • @Nishant 刚刚更新了 logcat 错误!!
  • 代码中的第 63 行是什么? TabGroupActivity 演员表?

标签: android android-tabhost android-alertdialog activitygroup


【解决方案1】:

您必须在current UI Thread 上运行AlertDialogue。使用runOnUiThread() 启动UI Thread。示例如下:

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

【讨论】:

  • 我给你发了一个例子。您必须在 onTap() 方法中编写代码
  • 上面写着The method runOnUiThread(new Runnable(){}) is undefined for the type InformationItemizedOverlay
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2018-03-12
  • 2023-04-03
  • 1970-01-01
  • 2021-09-19
相关资源
最近更新 更多