如何从 IntentService class 启动 Fragment?

How to start Fragment from IntentService class?

我有一个 Service 每 5 次执行一次 minute.It 当 executed.I 想在 [=] 上启动 Fragment 时显示 AlertDialog 14=] 按钮 click.I 试图像

一样启动 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();
                            }
                        });

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

您可以开始 activity ,然后只有您可以显示其中的片段。这是因为没有 activity , getFragmentManager() 将 return null

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

但是,这里有一些提示:

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

异常说明问题。 getApplicationContext return 值无法转换为 Activity。您必须针对现有的 activity.

我认为您需要在服务和 activity 之间进行一些通信。

您可以使用 Eventbus 或 broadcastreceiver 或类似的东西。

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