2011-09-01 52 views
0

我正在爲我的應用程序登錄屏幕上工作。如果我打開應用程序,通過從eclipse運行或選擇安裝在模擬器上的應用程序圖標,它將運行一個AuthUser.class,它檢查遠程服務器上的有效令牌。如果用戶沒有那麼AuthUser.class轉發記錄到Login.class通過......通過共享菜單轉發目標後的後退按鈕問題

if (authtoken.length() == 0 || authtoken.length() > 0 
      && checkAuthToken(authtoken) == false) { 
     Intent intent = new Intent(); 
     intent.setClass(AuthUser.this, Login.class); 
     startActivity(intent); 
     finish(); 
    } 

這個偉大的工程,因爲當我使用模擬器上的後退按鈕會關閉該應用程序,而不是去回到登錄屏幕。完善。

現在,當我從一個共享菜單,就像當我選擇圖庫中的圖片上的共享圖標來,然後從彈出菜單中選擇我的應用程序還着有Login.class通過...

Intent intent1 = new Intent(); 
       intent1.setClass(SharePictureMenu.this, AuthUser.class); 
       startActivity(intent1); 
       finish(); 

現在,當我從這裏登錄並按照慣例轉發到AuthUser.class時,現在後退按鈕會將我帶回登錄屏幕,即使我在兩種情況下轉發和完成都完全相同。顯然,我不希望這種行爲,因爲我希望它關閉應用程序並在登錄後返回到圖庫,以便用戶可以繼續共享圖像,而無需通過登錄屏幕返回。

任何建議,黑客或以其他方式修復這將不勝感激。

+0

你是什麼意思,「它轉發到AuthUser.class按慣例」? – Michael

+0

我的意思是,一旦用戶在該應用程序的愛將轉發到另一類稱爲AuthUser像這樣... 意圖intent = new Intent(); intent.setClass(Login.this,AuthUser.class); startActivity(intent); finish(); 所以當後退按鈕被按下時,它不應該回到登錄屏幕,因爲它已被轉發到另一個類(屏幕)並完成。然而,只有這一次不起作用時,應用程序才從共享菜單中調用。 – sasykes

回答

2

如果您正在對該活動調用finish(),則在該函數返回之前,它將被活動管理器標記爲已完成,並且用戶無法返回該活動。我不知道這種事情不會發生。確保你真的完成了這個活動,並且你沒有做兩次這樣的事情。

調試一些有用的工具:

  • 「亞行logcat」的輸出將包含一個日誌每次啓動活動。
  • 「adb logcat -b events」的輸出將包含完成的每個活動的日誌,以及它完成的原因(以及各種其他活動操作)。您可以使用「adb logcat -b events -b system」將其與另一個組合。
  • 「adb shell dumpsys activity」會爲您提供當前的活動堆棧,因此您可以看到爲您的應用管理的當前活動以及它們與其他活動的關係。
+0

Hrm ...我確定我不會說兩次。我會就額外的logcat選項提出建議,也許是I.可以看到爲什麼在共享菜單向前的情況下它沒有正確完成。感謝您的提示! – sasykes

+0

我也在尋找合作伙伴來幫助推出Android /基於web的項目,這是在天使名單上尋找投資者。任何有興趣的精彩編碼人員,都可以隨時打我。 – sasykes

+0

恩,謝謝hackbod。我在共享菜單代碼的上面找到了一段代碼,它也調用了它,所以主類兩次調用轉發登錄類。一切都很好。感謝您的輸入。 ;) – sasykes