Android 在片段中显示返回箭头
我想在“片段”工具栏中显示返回箭头。我正在尝试编写以下代码:Android 在片段中显示返回箭头,android,android-fragments,Android,Android Fragments,我想在“片段”工具栏中显示返回箭头。我正在尝试编写以下代码:((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true) 但正如所写:方法调用。。可能会产生“java.lang.NullPointerException”。由于写入无法解析方法,那么getSupportActionBar()呢。怎么了?这是我的密码: public class AddFilterFrag extend
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true)代码>
但正如所写:方法调用。。可能会产生“java.lang.NullPointerException”。由于写入无法解析方法,那么getSupportActionBar()呢。怎么了?这是我的密码:
public class AddFilterFrag extends android.app.Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.add_filter_layout, container, false);
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
return rootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
//something to do
return true;
}
return super.onOptionsItemSelected(item);
}
这只是一个你可以放心忽略的警告
背景:
Android sdk有注释,帮助开发人员避免常见错误。其中一个注释是@Nullable
。方法getSupportActionBar()
被这样注释,因为该方法可能返回null
。一种情况可能是,开发人员使用了themetheme.AppCompat.Light.NoActionBar
,从而禁用了ActionBar
如果布局中有ActionBar或工具栏(并正确设置),该方法将永远不会返回null
。您可以忽略如下警告:
//noinspection ConstantConditions
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
或者如果你想绝对安全:
ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
if(ab != null){
ab.setDisplayHomeAsUpEnabled(true);
}
或者在Kotlin中:
(活动作为?AppCompativeActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
在setContentView()方法之后,您将下面给出的代码放在下面
首先必须设置工具栏,然后尝试使用getSupportActionBar()
我希望这对你有帮助
首先将方法添加到调用片段的活动中
公共无效更改工具栏(){
//做好你的工作
}
把它称为碎片
((YourActivity)getActivity.changeToolbar()
使用导航图时,请使用navController执行此操作
在保存主机片段的活动上执行以下操作
lateinit var navController : NavController
在oncreateView中
navController = this.findNavController(R.id.nav_host_fragment)
NavigationUI.setupActionBarWithNavController(this, navController)
覆盖支持导航EUP
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
它自己处理向上箭头。您需要将主页按钮设置为在包含片段的活动中启用。看起来您有一个平台片段正在app compat活动中使用。通常情况下,你不会将两者混为一谈。App compat库片段用于App compat库活动。这是正确的。您可以忽略它,也可以在它之前进行空检查。在活动中添加陈述(如其他答案所示)不会有什么不同。谢谢您的回答
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}