У меня есть модуль кода, который реализует viewpager с навигационным ящиком, однако, когда я запускаю код, я получаю следующую ошибку
01-26 09:20:02.958: D/AndroidRuntime(18779): Shutting down VM
01-26 09:20:02.959: E/AndroidRuntime(18779): FATAL EXCEPTION: main
01-26 09:20:02.959: E/AndroidRuntime(18779): Process: com.example.tabwithslidingdrawer, PID: 18779
01-26 09:20:02.959: E/AndroidRuntime(18779): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tabwithslidingdrawer/com.example.tabwithslidingdrawer.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.access$800(ActivityThread.java:148)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Handler.dispatchMessage(Handler.java:102)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.os.Looper.loop(Looper.java:135)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.main(ActivityThread.java:5312)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Native Method)
01-26 09:20:02.959: E/AndroidRuntime(18779): at java.lang.reflect.Method.invoke(Method.java:372)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
01-26 09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Activity.performCreate(Activity.java:5953)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
01-26 09:20:02.959: E/AndroidRuntime(18779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
01-26 09:20:02.959: E/AndroidRuntime(18779): ... 10 more
09:20:02.959: E/AndroidRuntime(18779): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference 01-26 09:20:02.959: E/AndroidRuntime(18779): at com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
указывает на эту линию
// enabling action bar app icon and behaving it as a toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
весь код http://pastebin.com/u1K72fr7
Мой манифест
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.tabwithslidingdrawer"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Tabwithpager" >
<activity
android:name="com.example.tabwithslidingdrawer.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
android: theme = "@ style / Theme.Tabwithpager"
код http://pastebin.com/EFQLzRej
================================================== ================ РЕДАКТИРОВАТЬ / ОБНОВЛЕНИЕ:
Что я узнал из этого
Всякий раз, когда возникает такая ошибка
1. Проверьте, какой вид Activity используется, простой ли это Activity android.app, AppCompatActivity или ActionBarActivity и так далее.
2. Проверьте, подпадает ли ваш расширенный вид деятельности под категорию совместимости.
пример Activity / Fragment на основе android.app не являются типами appCompat, тогда как android.support.v4.app.Fragment или android.support.v4.app.ActivityCompat основаны на appCompat
если он попадает в appCompat, мы используем getSupportActionBar (), иначе для типов android.app мы можем использовать getActionBar ()
3. Отметьте тему, примененную к рассматриваемому действию, в файле манифеста.
Пример: в файле манифеста, если применена тема, скажем, android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () будет работать
но если тема, примененная для действия в манифесте, выглядит следующим образом: android: theme = "@ style / Theme.AppCompat.Light", тогда вам нужно использовать getSupportActionBar ()
getSupportActionbar()
?supportActionBar
(не ноль) с вашей темой. Вы заменили всеgetActionBar
наgetSupportActionBar
? Еще одна вещь, вам следует обновить свой новый журнал ошибок.getActionBar()
в своемMainActivity
... Отметьте это и измените наgetSupportActionBar
.Ответы:
Ваш код бросает
com.example.tabwithslidingdrawer.MainActivity.onCreate(MainActivity.java:95)
:Проблема довольно проста
Activity
- вы наследуете новоеandroid.support.v7.app.ActionBarActivity
. Вы должны использовать вызовgetSupportActionBar()
вместоgetActionBar()
.Если вы посмотрите на строку 65 своего кода выше, то увидите, что вы уже это делаете:
И затем вниз по строке 87, похоже, вы поняли то же самое:
Обратите внимание, как вы закомментировали
getActionBar()
.источник
android.support.v7.app.ActionBarActivity
устарел в пользуandroid.support.v7.app.AppCompatActivity
. Но проблема та же.Если кто-то хочет использовать android.app.ActionBar и android.app.Activity, вам следует изменить тему приложения в styles.xml , например:
Проблема в том, что вы могли использовать тему AppCompat .
С другой стороны, если вы хотите использовать android.support.v7.app.ActionBar и расширяете свою активность с помощью AppCompatActivity, вы должны использовать AppCompat тему чтобы избежать этой проблемы, например:
Надеюсь это поможет.
источник
AppCompatActivity
вместоActivity
, как в этом ответе .когда вы расширяете appcompatActivity, используйте
и когда вы расширяете ActionBar, используйте
не забудьте вызвать эту функцию в oncreate после инициализации панели инструментов / панели действий
источник
Я думаю, что вы хотите использовать getActivity (). Например:
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Это то, что вам нужно сделать с новыми библиотеками поддержки. AppCompatActivity заменил ActionBarActivity.
источник
Попробуйте проверить здесь
res >> значения >> styles.xml
убедитесь, что нет такого кода
если есть такой код, можно на время отключить или стереть
источник
<item name="windowNoTitle">true</item>
, что пришлось удалить.android:theme="@style/AppTheme.NoActionBar"
из<avticity>
тега на AndroidManifest.xmlПри использовании AppCompatActivity должен вызывать
Перед
getSupportActionBar()
источник
В моем случае это связано с тем, что
styles.xml
установлена неправильная родительская тема, т.е.NoActionBar
тема, конечноgetSupportActionbar()
же, нулевая:Поменял на что-то другое, исправил:
источник
Кнопка «Вверх» обычно активируется для низкоуровневых действий. В вашем манифесте я вижу только файл MainActivity. Не думаю, что имеет смысл активировать кнопку вверх для основного действия. Создайте действие, затем в манифесте добавьте атрибут parentActivityName. Затем активируйте кнопку вверх в методе onCreate действия.
Это должно помочь.
https://developer.android.com/training/appbar/up-action.html
источник
Попробуйте, надеюсь, это сработает, мой код работает нормально
источник
в этой строке вашей активности:
использовать это:
*
ваша деятельностьисточник
В моем случае у меня была такая же ошибка, но моя ошибка заключалась в том, что я не объявил свою панель инструментов.
Итак, прежде чем я использую getSupportActionBar, мне нужно было найти свою панель инструментов и установить actionBar
источник
Я знаю, что это старый вопрос. Но это может помочь многим, кто представляет эту проблему.
Чтобы решить эту проблему, проверьте, есть ли точка недействительности. Затем примените соответствующую конфигурацию:
источник
Если вы используете android.app.ActionBar и android.app.Activity, вам следует изменить тему приложения в теге приложения:
источник
Если вы столкнулись с этой ошибкой
Просто используйте
источник
Для всех, у кого есть BaseActivity и дочерний элемент, который расширяется от него, убедитесь, что сначала вызывается super.onCreate (), прежде чем что-либо делать. Старый Activity будет работать, если вы впоследствии вызовете super.onCreate ().
Ребенок расширяет активность - может вызвать super после того, как вы что-то сделали
Ребенок расширяет AppCompatActivity - сначала нужно вызвать super
источник
Для тех, кто все еще имеет эту проблему, моя проблема была решена в файле AndroidManifest.xml. Там, где говорится
<activity android:name=".MainActivity" android:theme="@style/AppTheme.NoActionBar">
, вам нужно удалитьNoActionBar
, сделав это<activity android:name=".MainActivity" android:theme="@style/AppTheme">
, потому что с установленным NoActionBar приложение не знает, нужна ли ему панель действий, когда вы вызываете ее внутри MainActivity.java.источник
Однажды я получил ту же ошибку, я создал шаблон для панели инструментов по умолчанию (toolbar.xml), а затем в другом представлении я создал сворачиваемую панель инструментов.
Мне нужно было добавить сворачиваемую панель инструментов в представление, которое показывает некоторую информацию о пользователе (например, whatsapp), но метод findViewById ссылался на панель инструментов по умолчанию (панель инструментов id), а не на сворачиваемую (также панель инструментов id) да, я написал один и тот же идентификатор для обеих панелей инструментов, поэтому, когда я попытался получить доступ к активности, приложение вылетело, показывая мне ошибку.
Я исправил ошибку, изменив идентификатор сворачиваемой панели инструментов на id: col_toolbar, и ошибка исчезла, и мое приложение работало отлично
источник
Вы должны попробовать это. Думаю, сработает.
источник
Лучшее решение сделать это в вашем методе Oncreate
за которым следует новый класс
источник
Пожалуйста, добавьте после
Toolbar
источник
Я новичок в разработке приложений для Android. Я столкнулся с этой ошибкой и потратил почти 5 часов, пытаясь ее исправить. Наконец, я обнаружил, что основной причиной этой проблемы было следующее, и если кто-то снова столкнется с этой проблемой в будущем, прочтите это.
Я пытался создать Home Activitiy с видео-фоном, для чего мне пришлось изменить родительскую тему с настройки по умолчанию
Theme.AppCompat.Light.DarkActionBar
наTheme.AppCompat.Light.NoActionBar
. Это отлично сработало для домашнего действия, но когда я установил новую кнопку с onclicklistener для перехода к другому действию, где я установил собственный текст для панели действий, эта ошибка выдается.В итоге я создал две темы и назначил их действиям следующим образом.
Я внес следующие изменения, чтобы исправить ошибку.
Определение тем в styles.xml
Связывание действий с соответствующими темами в
AndroidManifest.xml
источник
Всякий раз, когда возникает такая ошибка. Попробуйте проверить следующие вещи
Проверьте, какой вид Activity используется: простое действие android.app, AppCompatActivity или ActionBarActivity и т. Д.
Проверьте, подпадает ли ваш расширенный вид деятельности под категорию совместимости
пример Activity / Fragment на основе android.app не являются типами appCompat, тогда как android.support.v4.app.Fragment или android.support.v4.app.ActivityCompat основаны на appCompat
если он попадает в appCompat, мы используем getSupportActionBar (), иначе для типов android.app мы можем использовать getActionBar ()
Пример: в файле манифеста, если применена тема, скажем, android: theme = "@ android: style / Theme.Holo.Dialog" getActionBar () будет работать
но если для действия в манифесте применяется следующая тема: android: theme = "@ style / Theme.AppCompat.Light", тогда вам необходимо использовать getSupportActionBar ()
источник
если вы создали новую панель инструментов, тогда примените проверку, что вы применили метод setSupportActionBar (); это обязательно поможет вам
источник
Попробуйте сделать это:
Вместо этого:
источник
getSupportActionBar()
если результат уже есть вactionBar
переменной? Оба варианта плохие.