1

Я работаю над своим окончательным проектом в курсе программирования андроида (так что я все еще довольно новый). Я строю свой собственный медиаплеер. Я реализовал ящик, который содержит различные типы носителей (видео, аудио, поток и т. Д.), И я хочу, чтобы каждый щелкнутый элемент загружал фрагмент, который будет решать задачу. Первый, над которым я работаю, - это фрагмент аудио. Это список в списке, но я думаю, что это будет проще, чем видео. Так или иначе. когда я нажимаю на «audio» (picture link), я получаю исключение с нулевым указателем. Я пытался понять это на пару дней, но теперь я действительно трачу драгоценное время. Что я делаю не так?Исключительное исключение указателя при загрузке фрагмента

Потому что есть довольно много кода. Я буду использовать фрагменты (если люди предпочитают, я на самом деле вставляю весь код здесь, дайте мне знать, и я его изменю).

MainActivity: http://pastebin.com/zsXuZHkN

FragmentAudio: http://pastebin.com/77XsBbu9

ListAdapterAudio: http://pastebin.com/cfu7azP0

logact войти:

09-13 18:31:33.056 11959-11959/com.example.ref_apps.winnerplayer E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.ref_apps.winnerplayer, PID: 11959 
java.lang.NullPointerException 
     at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:414) 
     at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:449) 
     at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:441) 
     at com.example.ref_apps.winnerplayer.MainActivity.selectDrawerItem(MainActivity.java:118) 
     at com.example.ref_apps.winnerplayer.MainActivity$1.onItemClick(MainActivity.java:64) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:299) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1153) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3065) 
     at android.widget.AbsListView$3.run(AbsListView.java:4031) 
     at android.os.Handler.handleCallback(Handler.java:808) 
     at android.os.Handler.dispatchMessage(Handler.java:103) 
     at android.os.Looper.loop(Looper.java:193) 
     at android.app.ActivityThread.main(ActivityThread.java:5292) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 
     at dalvik.system.NativeStart.main(Native Method) 

есть и другие файлы, очевидно, но я не думаю, что они являются виновниками. Я добавлю файл по запросу.

Спасибо!

+0

Есть ли исключения в строке 111 в «MainActivity»? Вы создаете свой фрагмент каким-то странным образом, не проще ли использовать конструктор фрагментов в этом коммутаторе? Я думаю, что этот «fragClass.newInstance()» терпит неудачу, и поэтому «фрагмент» является нулевым, а NPE бросается при попытке загрузить его. – spoko

+0

Честно говоря, я украл эту идею из учебника. Казалось, это имеет смысл, но, возможно, это моя неопытность. Не могли бы вы немного рассказать о своем предложении? Спасибо –

ответ

1

В вашей деятельности вы импортируете android.support.v4.app.Fragment, а ваш фрагмент - android.app.Fragment. Вот почему ваш листинг завершился неудачно после вызова newInstance(), а ваш фрагмент равен NULL. То же самое касается и вашего ListFragment.

Вам также необходимо реализовать newInstance() в вашем фрагменте.

public static Fragment newInstance() 
{ 
    FragmentAudio myFragment = new FragmentAudio(); 
    return myFragment; 
} 
+0

Аналогичным образом вы должны импортировать 'android.support.v4.app.ListFragment' вместо' android.app.ListFragment' – headuck

+0

kphil - я попытался изменить импорт, но теперь, в beinTransaction() Я получаю сообщение об ошибке, которое ожидает v4. @headuck в каком файле? Я не могу найти такой импорт. –

+1

В FragmentVideo (и еще один класс фрагментов). Вы должны использовать Fragment из библиотеки поддержки во всем приложении. – headuck

1

Попробуйте добавить addToBackstack (null) в замену фрагмента.

(или)

Проверка количества backStack и вы должны очистить все счетчик перед тем заменить другой фрагмент.

+0

не заставит ли предыдущий фрагмент потерять все свои данные? Я имею ввиду - представьте, что вы используете медиаплеер и переходите от видео к аудио - я бы предпочел, чтобы он сохранил состояние видео и смог вернуться к нему. Не подскажете ли вы, что это уже невозможно? –

+0

Я не знаю, почему вы не утруждаете себя ответом на мой вопрос. Все, что я могу сказать, это то, что я добавил свой код, но обнаружил, что он абсолютно не влияет. –

Смежные вопросы