Поделиться контекстом активности среди намерений - PullRequest
0 голосов
/ 16 августа 2011

В моем приложении 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());
        }
    }
}

1 Ответ

1 голос
/ 16 августа 2011

Есть метод setContext (Activity _activity) в вашем графическом интерфейсе и вызывать его в onCreate каждого действия?

...