【问题标题】:Actiivity not found when trying to start from within AlertDialog尝试从 AlertDialog 中启动时找不到活动
【发布时间】:2014-02-20 09:42:13
【问题描述】:

当用户触摸 AlertDialog 内的 OK 按钮时,我一直在尝试让我的应用返回主 Activity。

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

调用运行良好,只是它似乎不知道如何找到主活动,即使我正在使用的调用在任何正常活动中都有效。

我得到的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();
    }

}

【问题讨论】:

  • 你在 AndroidManifest.xml 中定义了org.springframework.android.showcase2.MainActivity 吗?
  • 试试“MyAlertDialogFragment.this.getActivity().startActivity(i)”
  • 是的 MainActivity 在 Manifest 中

标签: android android-activity android-alertdialog


【解决方案1】:

代码行

// 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" Action 的活动。

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

所以用

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

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

【讨论】:

  • @ρяσѕρєяK 我没说。请阅读我的描述。是的,我同意您的评论,即如果他在活动清单中添加操作,他的代码将起作用。那是另一种方式。通常我们会创建一些有意义的动作。但是他的代码看起来像是在尝试添加组件而不是操作。我又一次被“选择的答案正确吗?”这个问题困住了。
【解决方案2】:

你在这里出错了。你需要将上下文传递到你的Intent

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

当你这样做时:

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

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

【讨论】:

  • getActivity 返回此片段关联的活动
  • 那为什么会出错new AlertDialog.Builder(getActivity())
  • 谢谢大家,MD 和 Raghunandan 的联合帮助已经奏效。编辑我的代码如下: Intent i = new Intent(getActivity(), org.springframework.android.showcase2.MainActivity.class);这使它起作用了。
  • @JohnCogan :您以正确的方式做事,只是忘记在我的评论中所说的 Activity AndroidManifest 中添加操作。所有答案都是正确的,但没有说明您的代码中有什么问题,也没有告诉您启动 Activity 的另一种方法。
  • @MD 那不适合你。那是给约翰科根的。他说你的努力帮助了他,尽管你之前发布了错误的答案。这似乎是一个小组发布的问题并被选中。他应该改变自己的行为。
猜你喜欢
  • 2014-11-21
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2011-06-26
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多