我正在建立一个有点画廊应用程序。我使用一个活动来保存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);
}
}
答案 0 :(得分:0)
如果您希望从片段触发onOptionsItemSelected
,则需要将setHasOptionsMenu
设置为true
,例如从onViewCreated
:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
setHasOptionsMenu(true);
}
答案 1 :(得分:0)
使用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);
}
}
答案 2 :(得分:0)
@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);
} }
答案 3 :(得分:0)
如果每个片段在自己的布局中都有Toolbar
,那么Toolbar
在onViewCreated
中View
中的onCreateView
后,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();
中添加server::server(boost::filesystem::path mappath) : mappath(mappath) {
if(boost::filesystem::is_directory(mappath) && boost::filesystem::exists(mappath)) {
// Do some stuff here
} else {
boost::filesystem::create_directory(mappath);
}
}
且不为空。例如:
mappath