我的应用程序中有3个屏幕,每个屏幕都在自己的类中。当应用程序启动时,我的Driver类会设置一些GUI元素,然后启动第一个Intent。
我有一个单独的GUI
类(Driver调用它),它处理从菜单到对话框的所有内容。以前我的应用没有使用Intents
所以我可以将Driver
中的活动/上下文作为Gui
类型的对象在其构造函数中传递给Activity
,因此可以定义类似LinearLayout ll = new LinearLayout(activity)
的布局等,一切都将在同一个活动/上下文中运行。
由于我已经开始使用intents
,因此每个Activity / Class都有自己的上下文,因此Gui
类的先前对话框和弹出框在后台并且没有运行。当我点击按钮启动对话框时,我收到错误android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@406629a0 is not valid; is your activity running?
。
对我来说,这表明新的Intent占据了前景,而前一个上下文中的对象超出了范围。
那么,有没有办法让我仍然可以将相同的上下文传递给新的Intent,这样我仍然可以访问这些共享对话框?或者我是否必须将代码带入每个类(重复的代码)?
如果有点难以理解,这里有一些基本的源代码:
public class Driver extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Gui display = new Gui(this);
display.showScreen();
}
}
/////////////GUI.java///////////////////////
public class Gui
{
private Activity activity;
private Gui()
{}
public Gui(Activity _activity)//,Context _context)
{
this();
activity = _activity;
}
public void showScreen()
{
if(isLocationMode())
{
Intent i = new Intent(activity,LocationScreen.class);
//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(i);
//locatScreen = new LocationScreen(activity);
//mainLayout.addView(locatScreen.getView());
}
else if (isManageMode())
{
Intent i = new Intent(activity,ManageScreen.class);
//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(i);
//manageScreen = new ManageScreen(activity);
//mainLayout.addView(manageScreen.getView());
}
else if (isForwardMode())
{
Intent i = new Intent(activity,ForwardScreen.class);
//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(i);
//forwardScreen = new ForwardScreen(activity);
//mainLayout.addView(forwardScreen.getView());
}
}
}
答案 0 :(得分:1)
在你的Gui中有一个setContext(Activity _activity)方法,并在每个活动的onCreate中调用它吗?