在Android上的屏幕之间转换

时间:2012-04-17 18:56:25

标签: android emulation back-button

我的应用程序有屏幕,只有一个活动。我的主要活动是:我有调用屏幕的方法,我没有使用活动(我在某处阅读使用更复杂。)所以我使用了方法,但有一个问题。

当我打开活动时,loginScreen即将确定

当我点击loginBtn时,listScreen即将到来确定

但是,当我点击listScreen中的后退按钮返回loginScreen时,应用程序正在关闭并打开模拟器的主屏幕。

通常;

loginScreen - > loginBtn - > listScreen - > listBtn - > writeScreen

我想要的是回到这条路上"返回"模拟器上的按钮。我不想覆盖后退按钮,因为这样我只能在方法中设置一个东西。

public class EmailActivity extends Activity 
{
public void onCreate(Bundle savedInstanceState) 
        {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.main);
        loginScreen();
    }

public void loginScreen() 
{
        this.setContentView(R.layout.main);
                Button loginBtn = (Button) findViewById(R.id.btnLogin);

        loginBtn.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) 
                        {
                listScreen();
            }

        });
}

public void listScreen()
{
            this.setContentView(R.layout.list);
                Button listBtn = (Button) findViewById(R.id.btnList);

        listBtn.setOnClickListener(new Button.OnClickListener() {

            @Override
            public void onClick(View v) 
                        {
                setContentView(R.layout.writeScreen);
            }

        });

}

3 个答案:

答案 0 :(得分:2)

因为您必须为在应用程序中使用的每个屏幕编写一个Activity ...您只是在调用方法,而在内存中您只有一个Activity,因此,后退按钮弹出Activity并返回到主页... 读这个: http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

如果你想调用另一个屏幕(Activity),你可以创建一个Intent实例,告诉系统“嘿!,调用我正在这里传递的东西”,例如,你有两个叫做A1的活动和A2,如果你想从A1打电话给A2,你必须这样做:

Intent intent = new Intent(A1.this,A2.class);
startActivity(intent);

它将A2推过A1,所以当你按回来时,你会得到A1

答案 1 :(得分:1)

要返回上一个屏幕,您需要使用不同的活动。现在您只有一个活动,当您按下后退按钮时,您的应用会关闭该活动,从而关闭整个应用程序。

如果你仍然想这样做,你可以覆盖硬件后退按钮来调用上述方法,而不是关闭应用程序。

答案 2 :(得分:1)

要直接回答您的问题,实现所要求的唯一方法是覆盖后退按钮。默认情况下,后退按钮会关闭当前活动并返回上一个活动。在您的情况下,您只有一项活动,以便您的应用关闭。覆盖后退按钮非常简单,您仍然可以控制“视图”。

您可以在活动类中使用几个类级别字段(私有变量)跟踪您的位置,例如

private int currentView;
private int lastView;
private static enum Views {LoginScreen, ListScreen}

...
...

public void loginScreen() 
{

    lastView = currentView;
    currentView = Views.LoginScreen;

    this.setContentView(R.layout.main);
            Button loginBtn = (Button) findViewById(R.id.btnLogin);

    loginBtn.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) 
                    {
            listScreen();
        }

    });
}

public void listScreen()
{

    lastView = currentView;
    currentView = Views.ListScreen;

    this.setContentView(R.layout.list);
    Button listBtn = (Button) findViewById(R.id.btnList);

    listBtn.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View v) 
                    {
            setContentView(R.layout.writeScreen);
        }

    });

}

然而,你真的这样做是错误的,特别是如果你想学习如何编写Android应用程序,并且可能在应用商店中发布一些。

活动更复杂,但有充分的理由,一旦你学会了基础知识,你就永远不会回头。我真的建议您为每个屏幕创建一个活动。你必须做更多的工作,但是,你最终会更好地控制你的应用程序的行为方式以及更好,更易于维护的代码。
Start here

如果您的目标是HC及以上,您可能还需要查看片段:

Fragments

去吧。你不会后悔!