我正在从我的应用程序通知中显示一个弹出窗口。但是当我检查我的通知时,我的应用程序中没有任何活动正在运行,因此当我显示对话时在通知中。对话引发异常,因为没有活动正在运行,并且我传递给对话构造函数的上下文为空,因此在没有活动正在运行时我需要一个上下文,提前感谢。或者任何想法我可以如何实现这个提前谢谢
5 回答
我会假设您的代码在 Android 的后台运行Service
。如果是这样的话,你Service
就是一个Context
本身,所以你可以在需要的时候使用它。
您的代码在后台线程中而不是在 Android 中运行Service
(在这种情况下您还有其他大问题),您可以使用应用程序上下文的实例。你通过调用得到一个Context.getApplicationContext
,你可以在Activity
启动你的后台代码并缓存它以供以后使用。
请注意,虽然使用应用程序上下文而不是活动上下文存在某些问题 - 例如,您不能LayoutInflater
从应用程序上下文中使用。
@Override
protected Dialog onCreateDialog(int i)
{
LayoutInflater factory = LayoutInflater.from(this);
final View textEntryView = factory.inflate(R.layout.sendemail, null);
final View textEntryView1 = factory.inflate(R.layout.sendemail_title, null);
to_id = (EditText) textEntryView.findViewById(R.id.edit_text_sender_mail_id);
from_id =(EditText) textEntryView.findViewById(R.id.id);
pwd =(EditText) textEntryView.findViewById(R.id.pwd);
return new AlertDialog.Builder(current_activity.this)
.setTitle("hello")
.setCustomTitle(textEntryView1)
.setView(textEntryView)
.setPositiveButton("Send", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
// code here...
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
System.exit(0);
}
})
.create();
}
您可以使您的对话框扩展和 Activity 类,并将其主题更改为清单文件中的对话框。在这种情况下,您调用notification.setLatestEventInfo(YourActivityDialog.this, contentTitle, contentText, contentIntent);
.
我遇到了同样的问题。我无法在我的活动中使用微调器。我通过使用setContentView
以下方法解决了这个问题
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.main, null);
this.setContentView(viewToLoad);
}
另一种方式是您可以为您的对话框使用单独的活动。通过如下设置活动
style.xml
<resources>
<style name="AppTheme" parent="android:Theme.Dialog">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
在 AndroidManifest 中声明这样的活动
<activity
android:name="DialogActivity"
android:theme="@style/AppTheme" />
您可以创建MyApplication
从 继承的类Application
,然后在该类中执行以下操作:
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
.........
}
public static Context getContext() {
return instance;
}
之后,MyApplication.getContext()
如果您需要上下文并且没有闲置,您可以在任何地方使用Activity
。