2012-04-17 88 views
0

我的應用程序有屏幕,並且我的主要活動只有一個活動; 我有調用屏幕的方法,我沒有使用活動(我讀過的地方,用法更復雜。)所以我使用的方法,但有一個問題。Android上屏幕之間的過渡

當我打開loginScreen即將OK活動

當我點擊loginBtn的listScreen即將OK

當我點擊listScreen後退鍵回來登錄屏幕,該應用程序正在關閉並打開模擬器的主屏幕。

通常;

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); 
      } 

     }); 

} 

回答

2

因爲你必須寫爲每個在應用程序中使用屏幕的活動......你只是調用方法,並在內存中你只有一個活動的話,返回按鈕彈出活動並返回家... 閱讀: http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html

如果你想調用另一個屏幕(活動)米您創建一個意圖,它告訴系統「哎!叫東西,我正經過這裏」的一個實例,例如,您有兩個活動,稱爲A1和A2,如果您想從A1撥打A2,則必須這樣做:

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

它會推A2在A1,所以當你按下回來,你會得到A1

+0

但是有太多東西是共享的方法。我必須這樣做嗎?或者有什麼辦法只有方法 – Merve 2012-04-17 19:03:47

+0

是的,該活動表示不同的屏幕,如果你想共享數據btw活動,你必須把數據意圖intent.putExtra(「myDataKey」,myData);或使用上下文 – DGomez 2012-04-17 19:06:29

+0

好吧,我明白非常感謝你。但只是爲了澄清方法和活動情況。對於一個好的真實的工作應用程序,屏幕之間的活動使用是應用程序的最佳方式?我的意思是屏幕之間的方法使用意味着滑過應用程序? – Merve 2012-04-17 19:12:52

1

對於重返之前的屏幕,您將需要使用不同的活動。現在只有一項活動,當您按下後退按鈕時,您的應用程序會關閉該活動,從而關閉整個應用程序。

如果您仍然想這樣做,這樣,你就可以覆蓋硬件後退按鈕來調用上面描述的方法,而不是關閉該應用程序。

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應用程序,或許一些發佈在應用程序商店。

活動比較複雜,但有充分的理由,一旦你學會了基本知識,你就永遠不會回頭。我真的建議你爲每個屏幕創建一個活動。你必須做更多的工作,但是最終你可以更好地控制你的應用程序的行爲和更好,更易於維護的代碼。它

Fragments

轉到:
Start here

如果你的目標HC及以上,你可能也想看看片段。你不會後悔的!

+0

感謝您的回覆,我會按照您的建議 – Merve 2012-04-17 19:16:49