簡體   English   中英

片段android中的后退按鈕問題

[英]Issue with back button in fragment android

我使用片段進行了應用,首先是一個家庭屏幕,其中有一個登錄按鈕。當用戶單擊登錄按鈕時,將打開一個新的包含用戶名和密碼的片段。我將loginfragment放到了堆棧中,以便用戶可以導航到主屏幕。如果用戶在登錄碎片中輸入正確的憑據,則會打開主要片段。我還放置了mainfrag,以便我可以來回導航。但是現在我想要的是當用戶在主屏幕上,如果他按了“后退”按鈕,則該應用程序應關閉,但就我而言,它將返回登錄片段。

例如:1]如果用戶從主屏幕按登錄按鈕

backstack contains "login"

2]現在,如果用戶輸入正確的憑據並單擊“確定”,則會打開主碎片

backstack contains "main"
                   "login"

3]現在在主碎片中,我有2個按鈕,分別是A和B,現在用戶是否單擊按鈕A

 backstack contains "A"
                    "main"
                     "login"

現在我想要的是,當用戶在主碎片上時單擊后退按鈕時,該應用程序應該完成,但是在我的情況下,它會返回到登錄碎片,因為登錄仍存在於后台堆棧中

編輯-

解決方案1:

@Override
public void onClick(View view) {
    Intent intent = new Intent(view.getContext(), Main.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    getActivity().finish();      
}

注意:

我假設-Home類是您當前的主屏幕類,Main類是您應用程序的主要起點。

使用標志Intent.FLAG_ACTIVITY_CLEAR_TOP並從主頁開始調用首頁。

解決方案2:

如果您只有一個處理所有片段的活動,則只需調用,

 @Override
    public void onClick(View view) {
        getActivity().finish();      
    }

您必須這樣做:

    @Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        startActivity(intent);
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

說是否是您想要的:)

當用戶單擊“后退”按鈕時,首先要從堆棧中獲取條目。 如果條目是您的主要片段,請殺死該應用程序。

android.os.Process.killProcess(android.os.Process.myPid()); 完();

當您只有可見的登錄片段(只有片段堆棧中的登錄片段)時,如果單擊“后退”按鈕,那么您想要關閉活動嗎?

解決方案:login片段添加到片段堆棧,而不將其添加到堆棧 (不使用addToBackStack()方法。)

例如:

添加一個片段而不將其添加到堆棧:

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

添加一個片段並將其添加到堆棧中:

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

但是,在調用commit()之前,可能需要調用addToBackStack(),以便將事務添加到片段事務的后堆棧中。 此后退堆棧由活動管理,並允許用戶通過按“后退”按鈕返回到先前的片段狀態。

閱讀有關片段的更多信息。

暫無
暫無

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

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