【问题标题】:How to start Fragment from IntentService class?如何从 IntentService 类启动 Fragment?
【发布时间】:2015-10-06 08:29:23
【问题描述】:

我有一个Service,它每 5 分钟执行一次。它在执行时显示一个AlertDialog。我想在点击AlertDialog 按钮时启动一个Fragment。我试图启动Fragment喜欢

android.app.FragmentManager fm = ((Activity) getApplicationContext()).getFragmentManager();

但给出异​​常java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity

这是我的AlertDialog 代码:

Handler mHandler = new Handler(getMainLooper());
                        mHandler.post(new Runnable() {
                            @Override
                            public void run() {
                                final AlertDialog alertDialog = new AlertDialog.Builder(getApplicationContext(),R.style.Theme_AppCompat_Light_Dialog_Alert)
                                .create();

                             // Setting Dialog Title
                                alertDialog.setTitle(eventNameEnglish);

                                // Setting Dialog Message

                                alertDialog.setMessage(eventAddressEnglish+"\n"+duration);


                        // Setting  View Details Button
                        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE,"View Details", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                android.app.FragmentManager fm = ((Activity) getApplicationContext()).getFragmentManager();

                                dialog_fragment = new DetailFragment("Events",
                                        eventNameEnglish, eventAddressEnglish,
                                        eventContactNumberEnglish, eventEmailEnglish, eventFaxEnglish,
                                        duration,eventOrganizerNameEnglish,
                                        eventDescriptionEnglish,eventFullDescriptionEnglish,
                                        eventLocationEnglish,eventImageEnglish,
                                        eventWebsiteEnglish
                                        );

                                dialog_fragment.show(fm, "detailScreen");
                            }
                        });

                        // Setting Cancel Button
                                alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE,"Cancel", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        alertDialog.dismiss();
                                    }
                                });

                        // Showing Alert Message
                        alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
                        alertDialog.show();
                            }
                        });

如何做到这一点?请帮忙。

【问题讨论】:

  • 投反对票前请说明原因

标签: java android android-fragments android-intentservice


【解决方案1】:

异常说明问题。 getApplicationContext 返回值不能转换为 Activity。你必须标记一个现有的活动。

我认为您需要在服务和活动之间进行一些沟通。

您可以使用 Eventbus 或广播接收器或类似的东西。

http://developer.android.com/reference/android/content/BroadcastReceiver.html

【讨论】:

  • 所以我不能直接从Service启动Fragment?
  • 您可以从服务开始活动:stackoverflow.com/questions/3606596/…
  • 您提供的链接是从服务而不是片段开始活动
  • 您可以将Fragment“放到”Activity上。如果 Activity 实例已经存在,你可以发送一个广播事件来对 Activity 上的片段做一些事情。如果活动实例不存在,则必须启动它。
  • 我使用了 BroadCastReceiver,它正在工作。感谢您的回答 :)
【解决方案2】:

您不能单独显示 FragmentFragment 只能显示嵌入在 Activity 中的 UI。所以,你的问题有点宽泛,无法正确回答。

但是,这里有几个指针:

  1. 写一个activity_layout 和一个frame_layout 作为片段的占位符
  2. 写一个Activity,内容为activity_layout
  3. 在您的 AndroidManifest.xml 中注册活动
  4. 使用适当的Intent 在您的服务上调用 startActivity
  5. ActivityonCreate 方法中,您可以获得FragmentManager,然后显示您的片段。

【讨论】:

    【解决方案3】:

    您可以开始活动,然后只有您可以从中显示片段。这是因为没有活动,getFragmentManager() 将返回 null

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多