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