尝试从AlertDialog中启动时未找到活动

时间:2014-02-20 09:42:14

标签: android android-activity android-alertdialog

当用户触摸AlertDialog内的确定按钮时,尝试让我的应用返回主要活动。

我显示的警告对话框基本上是一条错误消息,告知用户没有找到他们选择的特定日期的数据,并且在不是主要活动的活动中调用,但是我希望它们在发送回主要活动时被发送回主要活动。他们点击确定。

这个电话运行正常,只是因为它似乎不知道如何找到主要活动,即使我正在使用的电话在任何正常活动中都有效。

我得到的error是:

 1554-1554/org.springframework.android.showcase2 E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=org.springframework.android.showcase2.MainActivity }
        at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)

特定的AlertDialog代码是:

package org.springframework.android.showcase2;

import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MyAlertDialogFragment extends DialogFragment {
    private String title;
    private String message;
    private TextView tvError;

    public MyAlertDialogFragment(String sTitle, String sMessage){
        this.title = sTitle;
        this.message = sMessage;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        return new AlertDialog.Builder(getActivity())
                .setTitle(this.title)
                .setMessage(this.message)
                .setPositiveButton("Ok",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            // This is the way I nomally call a new activity inside other activities but seems to not work inside this AlertDialog scope
                            Intent i = new Intent("org.springframework.android.showcase2.MainActivity");
                            startActivity(i);
                        }
                    }
            )
            .create();
    }

}

2 个答案:

答案 0 :(得分:4)

代码行

// This is the way I nomally call a new activity inside other activities but seems to not work inside this AlertDialog scope
Intent i = new Intent("org.springframework.android.showcase2.MainActivity");
startActivity(i);

不正确。

当您说new Intent("org.springframework.android.showcase2.MainActivity")时,表示您正在处理可以处理"org.springframework.android.showcase2.MainActivity"操作的活动。

但在您的情况下"org.springframework.android.showcase2.MainActivity"代表Activity而非Action

所以使用

Intent i = new Intent(getActivity(), org.springframework.android.showcase2.MainActivity.class);
startActivity(i);

您应该阅读How to start an Activity Start an activity from a fragment

答案 1 :(得分:1)

你错了。你需要将上下文传递到Intent

Intent i = new Intent(getActivity(),"org.springframework.android.showcase2.MainActivity");
startActivity(i);

执行此操作时:

Intent in = new Intent(getActivity(), SecondActivity.class);

您正在创建显式意图,指定组件 SecondActivity 。此方法的签名为Intent(Context packageContext, Class clas)。它使用packageContext中的包名称和class中的clas名称来为该组件创建显式Intent。如果在Activity中使用此构造函数,则可以将其用作第一个参数,因为Activity扩展了Context。如果您从另一个类(如OnClickListener)使用此构造函数,则需要指定MyActivity.this作为传递Activity实例而不是OnClickListener的第一个参数(因为{{ 1}}不扩展Context。。