带片段的后退按钮导航
back button navigation with fragments
我正在构建一个有点像画廊的应用程序。我使用一个 activity 来保存 fragment_1,我在其中在回收视图中显示图像。从 fragment_1 我可以去 fragment_2。这两个片段都有自己不同的工具栏。我的愿望是通过按工具栏中的后退箭头从 fragment_2 回到 fragment_1。
我如何从 fragment_1 到 fragment_2:
Fragment2 fragment2 = new Fragment2();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment2)
.addToBackStack(null).commit();
我在 fragment_2 中已经做了什么:
Toolbar toolbar = getView().findViewById(R.id.toolbar_2);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
这没有用:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
如果你想要onOptionsItemSelected
从片段中触发你需要设置setHasOptionsMenu
到true
,例如从onViewCreated
:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
setHasOptionsMenu(true);
}
使用 popBackStack() 方法从返回堆栈中删除片段。
尝试使用此代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getSupportFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new fragment1).commit();
return true;
default:
return super.onOptionsItemSelected(item);
} }
如果每个片段在自己的布局中都有 Toolbar
,那么在 onCreateView
中膨胀 View
之后,您可以轻松地在 onViewCreated
中访问 Toolbar
。之后你可以设置导航图标并调用setNavigationOnClickListener
。在内部,您可以选择几种方法,用新的 Fragment
或 remove
现有的 Fragment
替换现有的 Fragment
或使用 popBackStack
。在看起来像这样的代码中:
Toolbar toolbar = view.findViewById(R.id.toolbar) // id of your toolbar
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); // set the back arrow in toolbar
//set click listener on back arrow
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getFragmentManager().popBackStack();
});
要使用此方法,您需要在 addToBackStack
中添加不含空值的 Fragment
。例如:
getFragmentManager().beginTransaction()
.add(R.id.container, your fragment here)
.addToBackStack("BackStack").commit();
我正在构建一个有点像画廊的应用程序。我使用一个 activity 来保存 fragment_1,我在其中在回收视图中显示图像。从 fragment_1 我可以去 fragment_2。这两个片段都有自己不同的工具栏。我的愿望是通过按工具栏中的后退箭头从 fragment_2 回到 fragment_1。
我如何从 fragment_1 到 fragment_2:
Fragment2 fragment2 = new Fragment2();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, fragment2)
.addToBackStack(null).commit();
我在 fragment_2 中已经做了什么:
Toolbar toolbar = getView().findViewById(R.id.toolbar_2);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
这没有用:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
如果你想要onOptionsItemSelected
从片段中触发你需要设置setHasOptionsMenu
到true
,例如从onViewCreated
:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
setHasOptionsMenu(true);
}
使用 popBackStack() 方法从返回堆栈中删除片段。 尝试使用此代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getSupportFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new fragment1).commit();
return true;
default:
return super.onOptionsItemSelected(item);
} }
如果每个片段在自己的布局中都有 Toolbar
,那么在 onCreateView
中膨胀 View
之后,您可以轻松地在 onViewCreated
中访问 Toolbar
。之后你可以设置导航图标并调用setNavigationOnClickListener
。在内部,您可以选择几种方法,用新的 Fragment
或 remove
现有的 Fragment
替换现有的 Fragment
或使用 popBackStack
。在看起来像这样的代码中:
Toolbar toolbar = view.findViewById(R.id.toolbar) // id of your toolbar
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp); // set the back arrow in toolbar
//set click listener on back arrow
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getFragmentManager().popBackStack();
});
要使用此方法,您需要在 addToBackStack
中添加不含空值的 Fragment
。例如:
getFragmentManager().beginTransaction()
.add(R.id.container, your fragment here)
.addToBackStack("BackStack").commit();