我想在Fragments ToolBar中显示Back Arrow。我试着写这段代码:((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
但AS写道:方法invokation ..可能会产生“java.lang.NullPointerException”。 getSupportActionBar()怎么样,AS写入无法解析方法。怎么了?这是我的代码:
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);
}
答案 0 :(得分:4)
这只是一个你可以放心忽略的警告。
<强>背景强>
Android sdk有Annotations帮助开发人员避免常见错误。其中一个注释是@Nullable
。方法getSupportActionBar()
被注释为,因为可能从该方法返回null
。一个案例可能是,开发人员使用主题Theme.AppCompat.Light.NoActionBar
从而禁用ActionBar。
如果布局中有ActionBar或工具栏(并正确设置),该方法将永远不会返回null
。你可以忽略这样的警告:
//noinspection ConstantConditions
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
或者如果你想绝对安全:
ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
if(ab != null){
ab.setDisplayHomeAsUpEnabled(true);
}
答案 1 :(得分:2)
首先为您的活动添加调用片段的方法。
public void changeToolbar(){ //做你的工作 }
在片段
中调用它((YourActivity)getActivity).changeToolbar();
答案 2 :(得分:1)
在使用导航图时,请使用navController来完成
在保存宿主片段的活动上执行此操作
lateinit var navController : NavController
在oncreateView
navController = this.findNavController(R.id.nav_host_fragment)
NavigationUI.setupActionBarWithNavController(this, navController)
覆盖onSupportNavigateUp
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp()
}
可单独处理向上箭头。
答案 3 :(得分:0)
在setContentView()方法之后,你把下面给出的代码。
首先,您必须设置工具栏,然后尝试使用getSupportActionBar()。
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);}
我希望这对你有所帮助。