2013-07-23 7 views
27

アクションバーのないナビゲーションバーがあります(私はアクションバーが必要ありません)。私はナビゲーション・ドロワーを開くことができるボタンを持っているようにしようとしています。アクションバーなしのナビゲーション引き出しを開くには、ただボタンで開きます

DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); 
mDrawerLayout.openDrawer(mDrawerLayout); 

私が知っているが、私はそれを使用する方法を知りませんでしたDrawerLayout http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)

ためopenDrawerと呼ばれる方法ですが、私は時にクリックボタンを作ってみましたが、この方法を実行します

私はそれをクリックすると、Java NullPointerExceptionが返されます。誰もが考えている?

EDIT: このコードは断片の中にあり、断片の外にそれらの引き出しレイアウトを参照しようとしています。私はデバッガを使用し、mDrawlerLayoutがNULLであることを示しています。

アドバイスはありますか?

ありがとうございます!

+0

編集を追加しました。 – CynthiaDDurazo

答えて

42

実際にアクティビティビューに入っているときにフラグメントのビューでドロワーレイアウトを見つけようとしているため、nullポインタが表示されます。動作するはず

getActivity().findViewById(R.id.drawer_layout) 

:あなたが欲しいものを行うには

迅速なハックのようなビューを見つけることです。より良い方法は、あなたのfindViewByIdを実行するのonCreateアクティビティで引き出し

public void openDrawer(){ 
    mDrawerLayout.openDrawer(mDrawerLayout); 
} 

を開くための活動の方法を持っていることです。

mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); 

mDrawerLayoutは、あなたの活動のメンバ変数でなければなりません。

は、その後、あなたのフラグメントであなたが呼び出すことができます。

//cast activity to MyActivity so compiler doesn't complain 
((MyActivity)getActivity()).openDrawer(); 

それを行うためのより良い方法は、フラグメントでリスナーを作成し、フラグメントにリスナーとしての活性を設定することです。次に、上記と同様に、アクティビティのメソッドを呼び出すことができます。私はあなたにそれをする方法についていくつかの研究をさせます。

+0

ありがとう、あなたは私のために多くのことを明らかにしました。 – CynthiaDDurazo

+12

私は 'openDrawer'メソッドで' mDrawerLayout.openDrawer(Gravity.LEFT);を使ってそれを動作させなければなりませんでした。 (私は両方のフラグメントとアクションバーなしでナビゲーションドロワーを使用しています)それ以外の場合は、単にアプリケーションをハングアップします。 –

+0

デフォルトアイコンを削除することはできますか?そのポジションで、私は別のオプションメニューを使いたいと思う。 – JCarlos

28

drawerLayout.openDrawer(Gravity.START);

0

は、私はここでこれについての答えを書いた:https://stackoverflow.com/a/18199771/880349

//For me a better way in avoiding a `null pointer` in getting the DrawerLayout 
    final DrawerLayout drawer = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); 
    btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
          //Opens the Drawer 
       drawer.openDrawer(Your View, Usually a ListView); 
      } 

       return false; 
     }); 

あなたがNullPointerExceptionが取得しないように、あなたは直接ビュー/ fragement内部の現在の引き出しを取得

0

ボタンクリックで動作します

mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      drawer.openDrawer(GravityCompat.START); 

     } 
    }); 
1

@athorありがとうございました& @Ashish Tana

エラー(NullPointerException)がわかりました。

鉱山はこのように動作します。 getView()の代わりにgetActivity()を使用し、引き出しをmDrawerLayout.openDrawer(Gravity.LEFT);で開きます。

mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); 
final ImageButton btnOpenDrawer = (ImageButton) getView().findViewById(R.id.drawer_menu); 

     btnOpenDrawer.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawerLayout.openDrawer(Gravity.LEFT); 
      } 
     }); 
+0

これは本当に私が配置したthis onCreate(saved Bundle savedInstanceState){ super.onCreate(savedInstanceState); //ここにコードを入れてください } – Faisal

関連する問題