![](/img/trans.png)
[英]Android how to add back button in activity to return back in fragment activity
[英]How to add a back button to the fragment in the action bar of an opened activity?
我有一個HomeActivity
,它實現了沒有 ToolBar的NavigationView
(帶有 ActionBar)。 在此活動中,我實現了用於導航到SettingsFragment
的onNavigationItemSelected
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
// more code
getSupportFragmentManager().beginTransaction().replace(R.id.container,new DashboardActivity()).commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// more code
getSupportFragmentManager().beginTransaction().replace(R.id.container,new SettingsFragment()).commit();
}
在SettingsFragment
片段中,我有一個監聽器來打開一個新活動:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout.activity_settings, container, false);
FloatingActionButton fab = (FloatingActionButton) fragmentView.findViewById(R.id.myfab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), SubSettingsActivity.class);
fragmentView.getContext().startActivity(intent);
startActivity(intent);
}
});
return fragmentView;
}
它打開一個活動,但沒有返回前一個片段的按鈕。 在操作欄中添加此按鈕的正確方法是什么?
編輯:我希望 go 的按鈕回到上一個片段SettingsFragment
而不是保存片段的活動。 為什么實現NavigationView
這么難?
您的 SubSettingsActivity 的主題應該擴展Theme.AppCompat.Light.DarkActionBar
然后在 java 中做 onCreate
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
然后在您聲明 SubSettingsActivity 的 AndroidManifest 中執行以下操作:
android:parentActivity="YOUR_ACTIVITY"
YOUR_ACTIVITY 是持有片段的活動
編輯:如果你想導航回 SettingFragment,最好使用 Android Jetpack 導航組件。 它讓你無縫地使用碎片。 這是鏈接: https://developer.android.com/guide/navigation/navigation-migrate
如何實現導航組件:簡單的方法
第 1 步:添加所需的依賴項
implementation 'androidx.navigation:navigation-fragment:2.3.0-alpha05'
implementation 'androidx.navigation:navigation-ui:2.3.0-alpha05'
步驟 2:轉到 Android Studio 上的 res 文件夾,右鍵單擊它,新建 > android 資源文件 您將看到以下對話框:
注意資源類型,您必須選擇導航
第 3 步:由於您的片段已創建,請轉到包含您的片段的活動 xml,例如 activity_main.xml 添加以下內容:
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/adView"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav"
android:id="@+id/nav_host_frag"/>
NavHostFragment是將處理您的片段的 class , navGraph將是您之前創建的導航文件。
第 4 步:將您的片段添加到導航文件中,打開您在第 2 步中創建的導航文件,將選項卡切換到設計。 如下圖所示
請注意,您的將是空的。 使用添加符號(屏幕截圖中的 1)將您的片段添加到設計視圖中。 注意(屏幕截圖中的 2)開始片段,這是首先膨脹的片段。 意味着當你打開 MainActivity 時,它在導航圖中的起始片段將是可見的。
卷曲箭頭是操作或導航。 例如,在我的屏幕截圖中,起始片段轉到注冊片段和登錄片段,它僅表示起始片段可以在圖表內的片段中導航到的位置。 如果未在導航圖中定義,則不會導航。 換句話說,嘿導航我將來會想要從啟動片段導航到注冊片段或登錄片段,請注意!
第 5 步:當您想從圖中的片段導航到片段時,實例化 NavController 的實例:
private NavController controller;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle
savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
controller = Navigation.findNavController(view);
}
NavController將讓您導航,我通常將其實例化為 onViewCreated()
然后:
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
controller.navigate(R.id.action_startFragment_to_anotherFragment);
}
});
要使用片段設置您的操作欄,請將以下代碼放入主機活動的 onCreate() 中:
NavController mNavigationController = Navigation.findNavController(this,R.id.nav_host_frag);
NavigationUI.setupActionBarWithNavController(this, mNavigationController);
同樣在主機活動中:
@Override
public boolean onSupportNavigateUp() {
return mNavigationController.navigateUp();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.