[英]back button navigation with fragments
我正在构建一个有点画廊的应用程序。 我使用一个活动来保存fragment_1,在其中我在recyclerview中显示图像。 我可以从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
,则可以在onViewCreated
View
在onCreateView
膨胀后轻松访问onViewCreated
Toolbar
。 之后,您可以设置导航图标并调用setNavigationOnClickListener
。 在里面你可以选择从几个方法既可以取代退出Fragment
通过新的Fragment
或remove
现有的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();
});
要使用这个方法,你需要添加Fragment
在没有空addToBackStack
。 例如:
getFragmentManager().beginTransaction()
.add(R.id.container, your fragment here)
.addToBackStack("BackStack").commit();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.