2016-03-19 91 views
2

我想在片段工具栏中显示后退箭头。我试图写这个代码:((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

您需要在包含片段的活动中将主页按钮设置为启用。 –

+0

它看起来像是在应用程序compat Activity中使用了平台片段。通常你不要混合这两者。 App compat库片段用于应用程序库活动。 –

回答

1
  1. 第一个添加方法到您的活动,调用片段。

    公共无效changeToolbar(){// 做你的工作 }

  2. 调用它的片段

    ((YourActivity)getActivity).changeToolbar();

+0

这是行得通的,谢谢 –

4

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

背景:

Android SDK中有注释,以帮助开发人员避免常见错误。其中一个注释是@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); 
} 
+0

这是正确的。您可以忽略它或在它之前放置一个空检查。在活动中添加声明(如其他答案所示)将不会产生任何影响。 –

+0

谢谢你的回答 –

0

的setContentView()方法后,你把下面的代码给出。

首先,您必须设置工具栏,然后尝试使用getSupportActionBar()。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);} 

我希望这对你有所帮助。