在片段中显示后箭头

时间:2016-03-19 18:08:58

标签: android android-fragments

我想在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);
    }

4 个答案:

答案 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)

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

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

  2. 在片段

    中调用它

    ((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);}

我希望这对你有所帮助。