В моем приложении 3 экрана, каждый из которых имеет свои классы.Когда приложение запускается, мой класс Driver устанавливает некоторые элементы GUI, а затем запускает первый Intent.
У меня есть отдельный класс GUI
(который вызывается Driver), который обрабатывает все, от меню до диалоговых окон.Ранее мое приложение не использовало Intents
, поэтому я мог передавать активность / контекст из Driver
в Gui
в его конструкторе как объект типа Activity
и в результате мог определять макеты и т. Д., Такие как LinearLayout ll = new LinearLayout(activity)
ивсе будет работать в одном действии / контексте.
Поскольку я перешел на использование intents
, у каждого занятия / класса есть свой собственный контекст, поэтому предыдущие диалоговые окна и всплывающие окна из класса Gui
в фоновом режиме и не работает.Я получаю сообщение об ошибке android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@406629a0 is not valid; is your activity running?
, когда нажимаю кнопку, чтобы запустить диалоговое окно.
Для меня это означает, что новые Интенты перешли на передний план, а объекты из предыдущего контекста находятся вне области видимости.
Итак, есть ли способ, которым я все еще могу передать тот же контекст в новые Интенты, чтобы я все еще мог получить доступ к этим общим диалоговым окнам?Или мне придется вводить код в каждый класс (дублирующий код)?
В случае, если это немного сложно понять, вот базовый исходный код:
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());
}
}
}