2017-10-09 22 views
2

這與所有「給我的類似」問題都非常不同。我工作的一個應用程序,當用戶註冊後在一個活動的帳戶稱爲SignUpActivity,我帶他們去使用下面的代碼的另一項活動叫UserProfileActivity:在一項活動中按下手機後退按鈕可進入另一項尚未在Android之前初始化的活動

SignUpActivity:

Intent userProfileIntent = new Intent(SignUpActivity.this, UserProfileActivity.class); 
startActivity(userProfileIntent); 
finish(); 

現在,在UserProfileActivity中,如果我按下後退按鈕,它會將我帶到一個活動,該活動在應用程序生命期內從未被訪問/實例化,名爲PartyListActivity。

UserProfileActivity:

public class UserProfileActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user_profile); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

} 

所以我的問題是爲什麼,當我按回到UserProfileActivity,它回去PartyListActivity,當我從來沒有對PartyListActivity過嗎?清單文件中是否存在指示此行爲的內容?

編輯

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.sample.package"> 

    <!-- To auto-complete the email text field in the login form with the user's emails --> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.READ_PROFILE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/Theme.AppCompat.Light.NoActionBar"> 
     <activity 
      android:name=".LoginActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".SignUpActivity" 
      android:label="@string/title_activity_sign_up" /> 
     <activity 
      android:name=".PartyListActivity" 
      android:label="@string/title_activity_party_list" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".UserProfileActivity" 
      android:label="@string/title_activity_user_profile" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".FriendsActivity" 
      android:label="@string/title_activity_friends" 
      android:theme="@style/AppTheme.NoActionBar" /> 
    </application> 

</manifest> 
+0

你什麼時候打電話給PartyListActivity?請給我看看你的清單! – redAllocator

+0

您可以使用adb打印活動backstack'adb shell dumpsys活動包' –

+0

@redAllocator我在其他方法中調用PartyListActivity。但是在我正在複製的情況下,這些方法從未被稱爲。 AyushKhare什麼時候可以運行? – Michael

回答

1

我會盡我所能打破的東西,並按照活動流程:

  • 推出以及活動LoginActivity
    (從你manifest文件)。

  • 然後,從LoginActivity您輸入到SignUpActivity,無論是與一些UI操作或以編程(假設LoginActivity未完成)。

  • SignUpActivity您輸入到UserProfileActivity。 (完成SignUpActivity,即SignUpActivity從背部堆疊中移除)。

  • 現在你在UserProfileActivity並從那裏按回按鈕帶你到LoginActivity因爲SignUpActivity已經從回棧中刪除。

  • 但是,你說,你在PartyListActivity只有當你以編程方式從LoginActivity開始它時纔會發生。

看着你LoginActivity,意想不到的活動是從那裏開始。

更多關於Tasks and Back Stack

+0

就是這樣。我從我的活動返回到登錄活動。然後它會檢查我是否仍然登錄Gmail。如果我是,它啓動啓動PartyListActivity的意圖。我還沒有嘗試過,但這應該是什麼導致這個問題。我很快就會接受答案!謝謝 – Michael

+0

在LoginActivity啓動'PartyListActivity'後破壞'LoginActivity'可能會解決您的問題。 – Journey

0

您可以指定在AndroidManifest.xml中活動的定義是 「parentActivityName」 屬性。您在SignUpActivity的定義中是否有這樣的屬性?

有關此屬性以及圍繞背堆棧導航的其他信息的完整文檔,請訪問https://developer.android.com/training/implementing-navigation/temporal.html

+0

糾正我,如果我錯了,但從我讀的我認爲你說要設置parentActivityName要麼退出應用程序或轉到PartyListActivity?無論哪種方式,我不想手動設置。如果我在UserProfileActivity中,並且所有導向該工具的活動都使用了'finish()',我想知道爲什麼按下後退按鈕時PartyListActivity會在後臺堆棧中。 – Michael

0

選項1:在UserProfileActivity完成後啓動PartyListActivity並沒有任何意義。以某種方式配置或調用該活動。仔細檢查你的代碼。

選項2:努力完成UserProfileActivity活動本身onBackPress()(即使它會完成)

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     finish(); 
    } 
相關問題