2016-03-19 24 views
2

私はフラグメントをツールバーに戻したいです。私はこのコードを書こうとしています:((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);前へ戻る矢印内の矢印

しかし、AS書き込み:メソッドinvokation .. "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); 
    } 
+0

フラグメントを含むアクティビティで有効にしてホームボタンを設定する必要があります。 –

+0

app compatアクティビティ内で使用されているプラ​​ットフォームのフラグメントがあるようです。通常は、2つを混在させないでください。 App互換ライブラリのフラグメントは、アプリケーション互換ライブラリの動作で使用されます。 –

答えて

1
  1. Fristは、あなたのアクティビティにフラグメントを呼び出すメソッドを追加します。

    ます。public void changeToolbar(){// あなたの仕事を行います }

  2. がフラグメント

    ((YourActivity)getActivity).changeToolbar()でそれを呼び出します。

+0

、ありがとうございます –

4

これは無視しても過言ではありません。

背景:

AndroidのSDKには、開発者が一般的な間違いを避けるために注釈を持っています。それらの注釈の1つは@Nullableです。メソッドgetSupportActionBar()には、そのメソッドからnullが返される可能性があるため、そのように注釈が付けられます。 1つのケースは、開発者がテーマTheme.AppCompat.Light.NoActionBarを使用して、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);} 

私はこれがあなたに役立つことを願っています。