iva*_*422 3 android android-fragments
我想在“片段工具栏”中显示“后退箭头”。我试图写这段代码: ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
但AS写道:方法调用..可能会产生“ 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);
}
Run Code Online (Sandbox Code Playgroud)
这只是一个警告,您可以放心忽略。
背景:
Android SDK带有注释,可帮助开发人员避免常见错误。这些注释之一是@Nullable。getSupportActionBar()照此方法注释,因为有可能null从该方法返回。一种情况是,开发人员使用了主题,Theme.AppCompat.Light.NoActionBar因此禁用了ActionBar。
如果您的布局中有ActionBar或Toolbar(并进行了正确设置),则该方法将永远不会返回null。您可以这样忽略警告:
//noinspection ConstantConditions
((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想绝对安全:
ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
if(ab != null){
ab.setDisplayHomeAsUpEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
或者在科特林:
(activity as? AppCompatActivity)?.supportActionBar?.setDisplayHomeAsUpEnabled(true)
首先向您的活动添加调用片段的方法。
public void changeToolbar(){ //做你的工作 }
在片段中调用它
((YourActivity)getActivity).changeToolbar();
| 归档时间: |
|
| 查看次数: |
4502 次 |
| 最近记录: |