簡體   English   中英

Android屏幕之間的過渡

[英]Transition between screens on Android

我的應用程序有屏幕,只有一個活動。 我的主要活動是:我有調用屏幕的方法,我沒有使用活動(我在某處讀到用法更復雜。)所以我使用了方法,但是有一個問題。

當我打開活動時,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);
            }

        });

}

因為您必須為應用程序中使用的每個屏幕編寫一個活動...您只是在調用方法,而在內存中只有一個活動,因此,后退按鈕會彈出活動並返回首頁...閱讀此內容: http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

如果您想調用另一個屏幕(Activity)m,則可以創建一個Intent實例,該實例告訴系統“嘿!,叫我傳來的東西”,例如,您有兩個活動,分別稱為A1和A2,如果要從A1呼叫A2,則必須執行以下操作:

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

它將A2推到A1之上,所以當您按回去時,您將得到A1

要返回上一屏幕,您將需要使用其他活動。 現在您只有一個活動,並且當您按下“后退”按鈕時,您的應用程序將關閉該活動,因此整個應用程序將關閉。

如果您仍然希望以這種方式進行操作,則可以覆蓋硬件后退按鈕以調用上述方法,而不必關閉應用程序。

要直接回答您的問題,實現要求的唯一方法是覆蓋“后退”按鈕。 默認情況下,后退按鈕關閉當前活動並返回上一個活動。 就您而言,您只有一項活動,因此您的應用程序將關閉。 覆蓋后退按鈕很容易,您仍然可以控制“視圖”。

您可以通過活動類中的幾個類級別字段(私有變量)來跟蹤自己的位置,例如

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應用程序並可能在應用程序商店中發布它們的話。

活動比較復雜,但是有充分的理由,一旦您掌握了基礎知識,就永遠不會回頭。 我真的建議您為每個屏幕創建一個活動。 您需要做更多的工作,但是最終您將對應用程序的行為以及更好,更可維護的代碼有更多的控制權。
從這里開始

如果您的目標是HC或更高版本,則可能還需要查看Fragments:

片段

去吧。 你不會后悔的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM