2015-10-06 173 views
-1

我已经这是在每5 minute.It执行一次Service显示了当executed.I要开始FragmentAlertDialog按钮click.I AlertDialog试图启动Fragment如何从IntentService类启动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(); 
          } 
         }); 

如何做到这一点请大家帮忙。

+0

请注明downvoting – Jas

回答

3

异常提示问题。 getApplicationContext返回值不能转换为Activity。您必须删除现有的活动。

我认为你需要服务和活动之间的一些沟通。

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

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

+0

,所以我不能直接从服务开始前的片段的原因是什么? – Jas

+0

你可以从服务启动活动:http://stackoverflow.com/questions/3606596/android-start-activity-from-service –

+0

你可以提供一个示例代码片段吗? – Jas

0

你可以开始活动,那么只有你可以显示该片段。这是因为没有活动,getFragmentManager()将返回空值

1

单独不能显示Fragment,A Fragment只能显示嵌入在Activity内的UI。所以,你的问题有点广泛,要妥善回答。

但是,这里有几个指针:

  1. 写,activity_layoutframe_layout作为占位符的片段
  2. Activityactivity_layout为内容
  3. 在AndroidManifest注册活动.xml
  4. 用您的服务拨打startActivity并带上适当的Intent
  5. in e onCreate你的方法Activity,你可以得到一个FragmentManager然后显示你的片段。