ナビゲーションドロワーを実装しようとしていますが、何らかの理由でこれが発生していますnullポインター例外。
私はそれに多くの時間を費やしましたが、無駄でした。これは私のコードの一部です。なぜnullポインタ例外が返されるのか理解できません。
ライブラリなどをインポートする必要がありますか?
前もって感謝します。
package com.motobeans.productions.aloha;
import Android.app.FragmentManager;
import Android.os.Bundle;
import Android.support.v4.widget.DrawerLayout;
import Android.support.v7.app.ActionBarActivity;
import Android.support.v7.app.ActionBarDrawerToggle;
import Android.view.LayoutInflater;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.AdapterView;
import Android.widget.ArrayAdapter;
import Java.util.Locale;
import Android.app.Fragment;
import Android.support.v7.widget.Toolbar;
import Android.widget.ImageView;
import Android.widget.ListView;
public class Activity_test extends ActionBarActivity {
private String[] mPlanetTitles;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mTitle;
private CharSequence mDrawerTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
mPlanetTitles = getResources().getStringArray(R.array.planets_array);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
mTitle = mDrawerTitle = getTitle();
// Set the adapter for the list view
mDrawerList.setAdapter(new ArrayAdapter<String>(this,
R.layout.drawer_list_item, mPlanetTitles));
// Set the list's click listener
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar,
R.string.drawer_open, R.string.drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
getActionBar().setTitle(mTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content view
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
これはlogcatの出力です
Process: com.motobeans.productions.aloha, PID: 1330
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.motobeans.productions.aloha/com.motobeans.productions.aloha.Activity_test}: Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.support.v4.widget.DrawerLayout.setDrawerListener(Android.support.v4.widget.DrawerLayout$DrawerListener)' on a null object reference
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2325)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
Caused by: Java.lang.NullPointerException: Attempt to invoke virtual method 'void Android.support.v4.widget.DrawerLayout.setDrawerListener(Android.support.v4.widget.DrawerLayout$DrawerListener)' on a null object reference
at com.motobeans.productions.aloha.Activity_test.onCreate(Activity_test.Java:74)
at Android.app.Activity.performCreate(Activity.Java:5990)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1106)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2278)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
.setDrawerListener()
を呼び出すと、mDrawerLayoutがnullのように見えます。
findViewById(R.id.drawer_layout)
とレイアウトファイルのナビゲーションドロワーに同じIDを使用していることを確認してください。
同様の問題がグーグルで報告されました https://code.google.com/p/Android/issues/detail?id=202478
DrawerLayout.removeDrawerListener()は、設定されたDrawerLayout.DrawerListenerなしで呼び出されます
しかし、Androidサポートライブラリ、リビジョン 23.2.1 (2016年3月)のリリース後、この問題は解決されました。
サポートライブラリをAndroid Support Library to 23.2.1
またはそれ以上の更新バージョンに更新します。
getSupportActionBar()
の代わりにgetActionBar()
を使用してください
mDrawerLayout
が適切にインスタンス化されていないようであるため、NULLポインタ例外が発生しています。これを解決するには、すべてのビューを適切にインスタンス化してください
DrawerLayout drawer;
drawer = findViewById(R.id.drawer_layout);