2011-08-29 97 views
0

我正在制作一个登录屏幕的应用程序,然后进入游戏的表面视图。问题是用户可以在播放时注销,我需要能够将用户返回到登录屏幕。我将如何做到这一点?从SurfaceView Android更改布局

我试图加入这个到surfaceview,但它不会做任何事情:

((Activity)getContext()).setContentView(R.layout.login);

编辑:

问题解决了,这里是我在surfaceview添加的代码:

 Intent intent = new Intent(); 
     intent.setClass(getContext(), BattleLogin.class); 
     ((Activity)getContext()).startActivityForResult(intent,loginResult); 

可能很重要的一点是,不要忘记将新的活动添加到清单。

回答

1

为什么不尝试创建一个意图来启动一个新的活动来处理用户登录?当用户与新屏幕交互时,它将使前一个Activity专用于在堆栈中暂停的SurfaceView。

您可以使用startActivityForResult()这是详细here您的SurfaceView活动中的任何地方,以获得状态信息,如成功登录或登录活动完成时的东西。

+0

我仍然没有看到如何从surfaceview中调用它。该示例从活动本身中调用另一个活动。我需要从surfaceview中调用它。当我尝试从surfaceview中做到这一点时,我得到这样的结果:方法startActivityForResult(Intent,int)未定义类型对战 – teynon

+0

我做了一些更多的选择,因为我不喜欢像Sam Quest建议的那样“Hack” 。我确实得到它的工作。对于其他人,这是代码: \t \t \t Intent intent = new Intent(); \t \t intent.setClass(getContext(),BattleLogin。类); ((Activity)getContext())。startActivityForResult(intent,loginResult); – teynon

0

不会一个警告对话框了

Login Name: 
Password: 

工作。用户应该能够输入凭证并继续。

也许当游戏暂停保存的凭证应允许用户自动登录

using a progress dialog 

UPDATE

相关的对话框中的错误可能是由于UI线程的问题。

,但她是一个快速黑客

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/wrapper" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <SurfaceView 
     android:id="@+id/surface" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <RelativeLayout android:id="@+id/my_dialog" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_centerInParent="true" 
     android:visibility="**visible|gone**" 
    > 
     <your loging layout comes here /> 
    </RelativeLayout> 
</RelativeLayout> 

这会浮在表面上。但你需要冻结表面(暂停你的游戏),而且这个布局不应该完全隐藏表面。

+0

我仍然不明白如何从surfaceview调用它。或者我至少需要能够将变量传递给主要活动并完成表面视图,以便活动知道下一个要显示的布局,但我无法找到关于如何从surfaceview切换到主要活动的任何信息。如果我尝试在surfaceview中打开一个对话框,我会遇到各种各样的错误。 – teynon