Calling notifyDataSetChanged() on my adapter that is within a ListFragment causes a NullPointerException? -
introduction:
i have following set up:
a
mainactivity
methodsonnewintent
,processnewintent
,mainactivity
implementsfragmentactivity
; , has tabbed fragment implementsfragmentlist
a
listaddactivity
activity creates newparcelable
listcontrolobject
the
listaddactivity
activity sends intent carrying parcel reconstructs listcontrolobject inside ofmainactivity
'sonnewintent
,processnewintent
class.however; can take in
intent
onnewintent
method , constructs newlistcontrolobject
fine; when calladapter.notifydatasetchanged
method onfragmentlist
class.
logcat error:
03-24 04:18:44.149: e/trace(16964): error opening trace file: no such file or directory (2) 03-24 04:18:49.543: e/androidruntime(16964): fatal exception: main 03-24 04:18:49.543: e/androidruntime(16964): java.lang.runtimeexception: unable start activity componentinfo{com.nanospark.upcdemo/com.nanospark.upcdemo.mainactivity}: java.lang.nullpointerexception 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activitythread.performlaunchactivity(activitythread.java:2184) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activitythread.handlelaunchactivity(activitythread.java:2211) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activitythread.access$600(activitythread.java:149) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activitythread$h.handlemessage(activitythread.java:1300) 03-24 04:18:49.543: e/androidruntime(16964): @ android.os.handler.dispatchmessage(handler.java:99) 03-24 04:18:49.543: e/androidruntime(16964): @ android.os.looper.loop(looper.java:153) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activitythread.main(activitythread.java:4987) 03-24 04:18:49.543: e/androidruntime(16964): @ java.lang.reflect.method.invokenative(native method) 03-24 04:18:49.543: e/androidruntime(16964): @ java.lang.reflect.method.invoke(method.java:511) 03-24 04:18:49.543: e/androidruntime(16964): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:821) 03-24 04:18:49.543: e/androidruntime(16964): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:584) 03-24 04:18:49.543: e/androidruntime(16964): @ dalvik.system.nativestart.main(native method) 03-24 04:18:49.543: e/androidruntime(16964): caused by: java.lang.nullpointerexception 03-24 04:18:49.543: e/androidruntime(16964): @ com.nanospark.upcdemo.mainactivity.processnewintent(mainactivity.java:102) 03-24 04:18:49.543: e/androidruntime(16964): @ com.nanospark.upcdemo.mainactivity.oncreate(mainactivity.java:81) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activity.performcreate(activity.java:5020) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1080) 03-24 04:18:49.543: e/androidruntime(16964): @ android.app.activitythread.performlaunchactivity(activitythread.java:2148) 03-24 04:18:49.543: e/androidruntime(16964): ... 11 more
the onnewintent
method:
@override protected void onnewintent(intent intent) { super.onnewintent(intent); processnewintent(intent); }
the processnewintent
method:
private void processnewintent(intent intent) { cyclefragment = new cycleviewfragment(); log.d("test", "method called test"); if (intent.hasextra("custom_object")) { if (intent.getparcelableextra("custom_object").equals(null)) { log.d("testing null", "object null"); } else { log.d("testing null", "object not null"); cyclefragment.geta1().add((listcontrolobject) intent.getparcelableextra("custom_object")); cyclefragment.adapter.notifydatasetchanged(); } }
the specific line throws nullpointerexception:
cyclefragment.adapter.notifydatasetchanged(); // - line 102
the listfragment
class:
public class cycleviewfragment extends listfragment { public view cycleviewfragment; public arraylist<listcontrolobject> a1 = new arraylist<listcontrolobject>(); public arrayadapter<listcontrolobject> adapter; public button addbutton; public context context; public view oncreateview(layoutinflater viewinflation, viewgroup container, bundle savedinstantstate) { cycleviewfragment = viewinflation.inflate( r.layout.cycleviewfragment_page, container, false); context = getactivity().getapplicationcontext(); a1.add(new listcontrolobject(1, "name", 1, 1, 1, 1, 1, 1, 1, 1, 1)); adapter = new arrayadapter<listcontrolobject>(getactivity() .getapplicationcontext(), android.r.layout.simple_list_item_1, a1); this.setlistadapter(adapter); addbutton = (button) cycleviewfragment.findviewbyid(r.id.addbutton); addbutton.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { intent myintent = new intent(getactivity(), listaddactivity.class); // myintent.putextra("array", a1); // optional parameters getactivity().startactivity(myintent); } }); return cycleviewfragment; } public arrayadapter<listcontrolobject> getadapter() { return adapter; } public void setadapter(arrayadapter<listcontrolobject> adapter) { this.adapter = adapter; } public arraylist<listcontrolobject> geta1() { return a1; } public void seta1(arraylist<listcontrolobject> a1) { this.a1 = a1; } }
try this:
if (cyclefragment != null && cyclefragment.adapter != null) { cyclefragment.adapter.notifydatasetchanged(); }
Comments
Post a Comment