在片段中显示后退箭头

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)

rub*_*ees 5

这只是一个警告,您可以放心忽略。

背景:

Android SDK带有注释,可帮助开发人员避免常见错误。这些注释之一是@NullablegetSupportActionBar()照此方法注释,因为有可能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)


Moh*_*yar 4

  1. 首先向您的活动添加调用片段的方法。

    public void changeToolbar(){ //做你的工作 }

  2. 在片段中调用它

    ((YourActivity)getActivity).changeToolbar();