在意图之间共享活动背景

时间:2011-08-16 15:29:20

标签: android android-intent android-activity android-context

我的应用程序中有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());
        }
    }
}

1 个答案:

答案 0 :(得分:1)

在你的Gui中有一个setContext(Activity _activity)方法,并在每个活动的onCreate中调用它吗?