[英]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.