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
。一种情况可能是,开发人员使用了theme
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);  
}  
或者在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()
        }