android - Navigation drawer Recycler View null pointer Exception -
i working recycleview per material design tutorial,i have done accordingly logcat says:
e/androidruntime: fatal exception: main process: com.portal.college.myapplication, pid: 6541 java.lang.nullpointerexception @ android.support.v7.widget.recyclerview$adapter.createviewholder(recyclerview.java:5229) @ android.support.v7.widget.recyclerview$recycler.getviewforposition(recyclerview.java:4453) @ android.support.v7.widget.recyclerview$recycler.getviewforposition(recyclerview.java:4363) @ android.support.v7.widget.linearlayoutmanager$layoutstate.next(linearlayoutmanager.java:1961) @ android.support.v7.widget.linearlayoutmanager.layoutchunk(linearlayoutmanager.java:1370) @ android.support.v7.widget.linearlayoutmanager.fill(linearlayoutmanager.java:1333) @ android.support.v7.widget.linearlayoutmanager.onlayoutchildren(linearlayoutmanager.java:562) @ android.support.v7.widget.recyclerview.dispatchlayout(recyclerview.java:2900) @ android.support.v7.widget.recyclerview.onlayout(recyclerview.java:3071) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.widget.relativelayout.onlayout(relativelayout.java:1055) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.support.v4.widget.drawerlayout.onlayout(drawerlayout.java:1067) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.widget.framelayout.layoutchildren(framelayout.java:453) @ android.widget.framelayout.onlayout(framelayout.java:388) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.widget.linearlayout.setchildframe(linearlayout.java:1671) @ android.widget.linearlayout.layoutvertical(linearlayout.java:1525) @ android.widget.linearlayout.onlayout(linearlayout.java:1434) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.widget.framelayout.layoutchildren(framelayout.java:453) @ android.widget.framelayout.onlayout(framelayout.java:388) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.widget.linearlayout.setchildframe(linearlayout.java:1671) @ android.widget.linearlayout.layoutvertical(linearlayout.java:1525) @ android.widget.linearlayout.onlayout(linearlayout.java:1434) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.widget.framelayout.layoutchildren(framelayout.java:453) @ android.widget.framelayout.onlayout(framelayout.java:388) @ android.view.view.layout(view.java:14817) @ android.view.viewgroup.layout(viewgroup.java:4631) @ android.view.viewrootimpl.performlayout(viewrootimpl.java:1983) @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1740) @ android.view.viewrootimpl.dotraversal(viewrootimpl.java:996) @ android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:5600) @ android.view.choreographer$callbackrecord.run(choreographer.java:761) @ android.view.choreographer.docallbacks(choreographer.java:574) @ android.view.choreographer.doframe(choreographer.java:544) @ android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:747) @ android.os.handler.handlecallback(handler.java:733) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:136) @ android.app.activitythread.main(activitythread.java:5001) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:515) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:785) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:601) @ dalvik.system.nativestart.main(native method) main_layout.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:elevation="7dp"> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include android:id="@+id/app_bar" layout="@layout/app_bar_main" /> </linearlayout> <fragment android:id="@+id/fragment_navigation_drawer" android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="start" app:layout="@layout/fragment_navigation_drawer" android:name="com.portal.college.myapplication.navigationdrawerfragment" tools:layout="@layout/fragment_navigation_drawer" /> </android.support.v4.widget.drawerlayout> fragment layout xml file is: fragment_navigation_drawer.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#8c8c8c" tools:context="com.portal.college.myapplication.navigationdrawerfragment"> <include android:id="@+id/nav_head" layout="@layout/nav_header_main" /> <android.support.v7.widget.recyclerview android:id="@+id/drawerlist" android:layout_width="match_parent" android:layout_height="wrap_content" > </android.support.v7.widget.recyclerview> </relativelayout> now mainactivity.java
package com.portal.college.myapplication; import android.content.intent; import android.os.bundle; import android.support.design.widget.floatingactionbutton; import android.support.design.widget.snackbar; import android.support.v7.widget.recyclerview; import android.view.view; import android.support.design.widget.navigationview; import android.support.v4.view.gravitycompat; import android.support.v4.widget.drawerlayout; import android.support.v7.app.actionbardrawertoggle; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.view.menu; import android.view.menuitem; public class mainactivity extends appcompatactivity implements navigationview.onnavigationitemselectedlistener { private recyclerview recyclerview; private toolbar toolbar; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); getsupportactionbar().setdisplayshowhomeenabled(true); navigationdrawerfragment drawerfragment = (navigationdrawerfragment) getsupportfragmentmanager().findfragmentbyid(r.id.fragment_navigation_drawer); drawerfragment.setup((drawerlayout) findviewbyid(r.id.drawer_layout),toolbar); floatingactionbutton fab = (floatingactionbutton) findviewbyid(r.id.fab); fab.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { snackbar.make(view, "replace own action", snackbar.length_long) .setaction("action", null).show(); } }); } @override public void onbackpressed() { drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); if (drawer.isdraweropen(gravitycompat.start)) { drawer.closedrawer(gravitycompat.start); } else { super.onbackpressed(); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { int id = item.getitemid(); if(id == r.id.action_settings) { return true; } if(id == r.id.search) { startactivity(new intent(this, searchactivity.class)); } return super.onoptionsitemselected(item); } @suppresswarnings("statementwithemptybody") @override public boolean onnavigationitemselected(menuitem item) { // handle navigation view item clicks here. int id = item.getitemid(); drawerlayout drawer = (drawerlayout) findviewbyid(r.id.drawer_layout); drawer.closedrawer(gravitycompat.start); return true; } } navigationdrawerfragment.java
package com.portal.college.myapplication; import android.app.activity; import android.os.bundle; import android.support.v4.app.fragment; import android.support.v4.widget.drawerlayout; import android.support.v7.app.actionbardrawertoggle; import android.support.v7.widget.linearlayoutmanager; import android.support.v7.widget.recyclerview; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.support.v7.widget.toolbar; import java.util.arraylist; import java.util.list; public class navigationdrawerfragment extends fragment { private actionbardrawertoggle mdrawertoggle; private drawerlayout mdrawerlayout; private recyclerview recyclerview; private vivzadapter adapter; public navigationdrawerfragment() { // required empty public constructor } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment view layout = inflater.inflate(r.layout.fragment_navigation_drawer,container,false); recyclerview = (recyclerview) layout.findviewbyid(r.id.drawerlist); adapter = new vivzadapter(getactivity(),getdata()); recyclerview.setlayoutmanager(new linearlayoutmanager(getactivity())); recyclerview.setadapter(adapter); return layout; } public static list<information> getdata(){ list<information> data = new arraylist<>(); int icons[] = { r.drawable.ic_menu_camera, r.drawable.ic_menu_gallery, r.drawable.ic_menu_manage, r.drawable.ic_menu_send}; string[] title = {"camera","gallery","settings","send"}; for(int i=0;i<title.length && i<icons.length;i++){ information current = new information(); current.iconid = icons[i]; current.title = title[i]; data.add(current); } return data; } public void setup(drawerlayout drawerlayout,toolbar toolbar) { mdrawerlayout = drawerlayout; mdrawertoggle = new actionbardrawertoggle(getactivity(), drawerlayout, toolbar, r.string.navigation_drawer_open, r.string.navigation_drawer_close){ public void ondraweropened(view drawerview){ super.ondraweropened(drawerview); } public void ondrawerclosed(view drawerview){ super.ondrawerclosed(drawerview); } }; mdrawerlayout.setdrawerlistener(mdrawertoggle); mdrawerlayout.post(new runnable() { @override public void run() { mdrawertoggle.syncstate(); } }); /* containerview = getactivity().findviewbyid(fragment_id); mdrawerlayout=drawerlayout; mdrawertoggle = new actionbardrawertoggle(getactivity(), drawerlayout, toolbar, r.string.open_drawer,r.string.close_drawer){ @suppresslint("newapi") public void ondraweropened(view drawerview){ super.ondraweropened(drawerview); if(!muserlearneddrawer){ muserlearneddrawer = false; savetopreferences(getactivity(),key_user_learned_drawer, muserlearneddrawer+""); } getactivity().invalidateoptionsmenu(); */ } } adapter class vivzadapter.cjava
package com.portal.college.myapplication; import android.content.context; import android.support.v7.widget.recyclerview; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.imageview; import android.widget.textview; import java.util.collections; import java.util.list; /** * created admin on 08-feb-16. */ public class vivzadapter extends recyclerview.adapter<vivzadapter.myviewholder>{ private final layoutinflater inflater; list<information> data = collections.emptylist(); public vivzadapter(context context,list<information> data){ inflater=layoutinflater.from(context); this.data=data; } @override public myviewholder oncreateviewholder(viewgroup parent, int viewtype) { view view = inflater.inflate(r.layout.custom_row,parent,false); myviewholder holder = new myviewholder(view); return null; } @override public void onbindviewholder(myviewholder holder, int position) { information current = data.get(position); holder.title.settext(current.title); holder.id.setimageresource(current.iconid); } @override public int getitemcount() { return data.size(); } class myviewholder extends recyclerview.viewholder{ textview title; imageview id; public myviewholder(view itemview) { super(itemview); title = (textview) itemview.findviewbyid(r.id.listtext); id = (imageview) itemview.findviewbyid(r.id.listicon); } } } the list item class information.java
package com.portal.college.myapplication; /** * created admin on 08-feb-16. */ public class information { int iconid; string title; } list row layout custom_row.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <imageview android:id="@+id/listicon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_menu_camera"/> <textview android:id="@+id/listtext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="camera" /> </linearlayout> i have gone through of solution on stackoverflow regarding same issue, failed here.
one thing noticed in vivzadapter.java, function name getitemcount() getting data count return data.size(), when change return 0 works without recyclerview, when returned data.size(), gives nullpointerexception.
hope have explained in detail.
any advice appreciated
your vivzadapter.java returning null ,because of @ run time throwing out null pointer exception there.
package com.portal.college.myapplication; import android.content.context; import android.support.v7.widget.recyclerview; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.imageview; import android.widget.textview; import java.util.collections; import java.util.list; /** * created admin on 08-feb-16. */ public class vivzadapter extends recyclerview.adapter<vivzadapter.myviewholder>{ private final layoutinflater inflater; list<information> data = collections.emptylist(); public vivzadapter(context context,list<information> data){ inflater=layoutinflater.from(context); this.data=data; } @override public myviewholder oncreateviewholder(viewgroup parent, int viewtype) { view view = inflater.inflate(r.layout.custom_row,parent,false); myviewholder holder = new myviewholder(view); return holder; } @override public void onbindviewholder(myviewholder holder, int position) { information current = data.get(position); holder.title.settext(current.title); holder.id.setimageresource(current.iconid); } @override public int getitemcount() { return data.size(); } class myviewholder extends recyclerview.viewholder{ textview title; imageview id; public myviewholder(view itemview) { super(itemview); title = (textview) itemview.findviewbyid(r.id.listtext); id = (imageview) itemview.findviewbyid(r.id.listicon); } } } above code might solve issue.
Comments
Post a Comment