如何从 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
您不能单独显示 Fragment
,Fragment
只能显示嵌入在 Activity
中的 UI。所以,你的问题有点宽泛,无法正确回答。
但是,这里有一些提示:
- 用
frame_layout
写一个 activity_layout
作为片段的占位符
- 以
activity_layout
为内容写一个Activity
- 在您的 AndroidManifest.xml
中注册 activity
- 使用适当的
Intent
在您的服务上调用 startActivity
- 在你的
Activity
的onCreate
方法中,你可以得到一个FragmentManager
,然后显示你的片段。
异常说明问题。 getApplicationContext return 值无法转换为 Activity。您必须针对现有的 activity.
我认为您需要在服务和 activity 之间进行一些通信。
您可以使用 Eventbus 或 broadcastreceiver 或类似的东西。
http://developer.android.com/reference/android/content/BroadcastReceiver.html
我有一个 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
您不能单独显示 Fragment
,Fragment
只能显示嵌入在 Activity
中的 UI。所以,你的问题有点宽泛,无法正确回答。
但是,这里有一些提示:
- 用
frame_layout
写一个activity_layout
作为片段的占位符 - 以
activity_layout
为内容写一个Activity
- 在您的 AndroidManifest.xml 中注册 activity
- 使用适当的
Intent
在您的服务上调用 startActivity
- 在你的
Activity
的onCreate
方法中,你可以得到一个FragmentManager
,然后显示你的片段。
异常说明问题。 getApplicationContext return 值无法转换为 Activity。您必须针对现有的 activity.
我认为您需要在服务和 activity 之间进行一些通信。
您可以使用 Eventbus 或 broadcastreceiver 或类似的东西。
http://developer.android.com/reference/android/content/BroadcastReceiver.html