java - Blank ListView with no errors in Logcat - Android & custom adapter -
i've been trying create listview display event items, isn't showing anything. i've pretty followed this example. dq.getalleventscategory() method returns arraylist of event items.
here's activity:
public class categoryactivity extends actionbaractivity { databasequeries dq = new databasequeries(this); private arraylist<event> eventdetails; public string typesearchterm; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_category); intent = getintent(); typesearchterm = i.getstringextra(string.valueof(r.string.event_type_extra)); //try fill arraylist events databasequeries dq = new databasequeries(this); try { //eventdetails = dq.getalleventscategory(typesearchterm); eventdetails = dq.getallevents(); log.d("array size", eventdetails.size() + ""); date d = new date(); // event e = new event("bbq", "bottle cap",d, "this event", "www.google.com", d, d ); // eventdetails.add(e); // log.d("array size after", eventdetails.size() + ""); } catch (parseexception e) { e.printstacktrace(); } final listview lv1 = (listview)findviewbyid(r.id.categorylistview); lv1.setadapter(new eventitemadapter(this, eventdetails)); lv1.setonitemclicklistener(new adapterview.onitemclicklistener() { @override public void onitemclick(adapterview<?> a, view v, int position, long id) { object o = lv1.getitematposition(position); event objevent = (event)o; toast.maketext(categoryactivity.this, "you have chosen : " + " " + objevent.geteventname(), toast.length_short).show(); } }); }} my adapter:
public class eventitemadapter extends baseadapter{ private static arraylist<event> eventdetails; private layoutinflater minflater; private static final simpledateformat parser = new simpledateformat("dd/mm/yyyy"); //dd-mm-yyyy private static final simpledateformat parsetime = new simpledateformat("hh:mm a");//hh:mm public eventitemadapter(context context, arraylist<event> results) { eventdetails = results; minflater = layoutinflater.from(context); } @override public int getcount() { return eventdetails.size(); } @override public object getitem(int i) { return eventdetails.get(i); } @override public long getitemid(int i) { return i; } @override public view getview(int position, view convertview, viewgroup parent) { viewholder holder; if(convertview == null){ convertview = minflater.inflate(r.layout.listview_row, null); holder = new viewholder(); holder.eventdetailname = (textview)convertview.findviewbyid(r.id.eventdetailsname); holder.eventdetaillocation = (textview)convertview.findviewbyid(r.id.eventdetailslocation); holder.eventdetaildate = (textview)convertview.findviewbyid(r.id.eventdetailsdate); holder.eventdetailstarttime = (textview)convertview.findviewbyid(r.id.eventdetailsstarttime); convertview.settag(holder); } else{ holder = (viewholder)convertview.gettag(); } holder.eventdetailname.settext(eventdetails.get(position).geteventname()); holder.eventdetaillocation.settext(eventdetails.get(position).geteventlocation()); date temp = new date(); temp = eventdetails.get(position).geteventdate(); holder.eventdetaildate.settext(parser.format(temp)); date temptime = new date(); temptime = eventdetails.get(position).geteventstarttime(); holder.eventdetailstarttime.settext(parsetime.format(temptime)); //return current view return convertview; } static class viewholder{ textview eventdetailname; textview eventdetaillocation; textview eventdetaildate; textview eventdetailstarttime; } } this item view:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:weightsum="1"> <imageview android:id="@+id/event_photo" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginbottom="5dp" android:layout_marginleft="10dp" android:layout_marginright="10dp" android:layout_margintop="10dp" android:src="@drawable/ic_launcher" /> <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <textview android:id="@+id/eventdetailsname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="event name" android:textappearance="?android:attr/textappearancemedium" android:textcolor="#33cc33" android:layout_margintop="25dp" android:layout_marginbottom="6dp" /> <tablelayout android:layout_width="match_parent" android:layout_height="wrap_content"> <tablerow android:layout_width="fill_parent" android:layout_height="fill_parent"> <textview android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="time: " android:layout_marginright="5dp" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="new text" android:id="@+id/eventdetailsstarttime" android:layout_column="3" /> </tablerow> <tablerow android:layout_width="fill_parent" android:layout_height="fill_parent"> <textview android:id="@+id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="date: " android:layout_marginright="5dp" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="new text" android:id="@+id/eventdetailsdate" android:layout_column="3" /> </tablerow> </tablelayout> </linearlayout> <tablerow android:layout_width="wrap_content" android:layout_height="match_parent"> <textview android:id="@+id/location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="location: " android:layout_marginright="5dp" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="new text" android:id="@+id/eventdetailslocation" android:layout_column="3" /> </tablerow> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="?android:attr/textappearancemedium" android:text="medium text" android:id="@+id/textview7" /> </linearlayout> and the actual listview:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/app_bar" layout="@layout/app_bar" /> <listview android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/categorylistview"/> </linearlayout> edit:
code getalleventscategory():
public arraylist<event> getalleventscategory(string category) throws parseexception { sqlitedatabase dq = this.getreadabledatabase(); arraylist<event> global = new arraylist<event>(); string query = "select e." + event_id + ", e." + event_name + ", e." + event_society_id + ", e." + event_location + ", e." + event_link + ", e." + event_start_time + ", e." + event_end_time + ", et." + event_type + " " + table_event + " e left join " + table_has_category + " h on e." + event_id + " = h." + has_event_id + " join " + table_event_type + " et on h." + has_event_type_id + " = et." + event_type_id + " et." + event_type + " = \"" + category + "\";"; log.d("query ", "" + query); cursor cursor = dq.rawquery(query, null); int numrows = cursor.getcount(); //for loop add each event arraylist (int = 0; < numrows; i++) { event e = new event(); e.seteventid(integer.parseint(cursor.getstring(0))); e.seteventname(cursor.getstring(1)); e.setsocietyid(integer.parseint(cursor.getstring(2))); e.seteventlocation(cursor.getstring(4)); string mydate = cursor.getstring(5); e.seteventdate(parser.parse(mydate)); e.seteventdescription(cursor.getstring(6)); e.seteventlink(cursor.getstring(7)); string mystarttime = cursor.getstring(8); e.seteventstarttime(parsetime.parse(mystarttime)); string myendtime = cursor.getstring(9); e.seteventendtime(parsetime.parse(myendtime)); global.add(e); if (i < numrows) { cursor.movetoposition(i + 1); } if (i > numrows) { cursor.movetofirst(); } } return global; } i've tried without specific category search (as in using arraylist returned getallevents method) i'm still getting null pointer exception. null pointer exception getallevents , empty/blank listview getalleventscategory
getallevents() method:
public arraylist<event> getallevents() throws parseexception { sqlitedatabase dq = this.getreadabledatabase(); arraylist<event> global = new arraylist<event>(); log.d("query ", "" + query); cursor cursor = dq.rawquery(query, null); int numrows = cursor.getcount(); cursor.movetofirst(); if(cursor.movetofirst()){ cursor.movetofirst(); //for loop add each event arraylist (int = 0; < numrows; i++) { event e = new event(); e.seteventid(integer.parseint(cursor.getstring(0))); e.seteventname(cursor.getstring(1)); e.setsocietyid(integer.parseint(cursor.getstring(2))); e.seteventlocation(cursor.getstring(3)); string mydate = cursor.getstring(4); e.seteventdate(parser.parse(mydate)); e.seteventdescription(cursor.getstring(5)); if(cursor.getstring(6) != null) { e.seteventlink(cursor.getstring(6)); }else{ e.seteventlink(""); } string mystarttime = cursor.getstring(7); e.seteventstarttime(parsetime.parse(mystarttime)); date date = new date(); date.settime(0); if(cursor.getstring(8) != null){ string myendtime = cursor.getstring(8); e.seteventendtime(parsetime.parse(myendtime)); }else{ e.seteventendtime(date); } global.add(e); if (i < numrows) { cursor.movetoposition(i + 1); } if (i > numrows) { cursor.movetofirst(); } } }else{ log.d("results", "no results"); } log.d("array size", "" + global.size()); return global; } this logcat. d log "array size" size of array should parameter lv1.setadapter() method
first of must consider these points while using listview,
the height of list item view should "wrap_content".if make "match_parent", first row take space on device , there no room rest of row.
the height of listview should "match_parent".if make "wrap_content", recycling concept of list view not used because creates rows of listview listview display first time.it affects scrolling of listview , consume lot of memory.
you use wrong id listview in java class.the listview id in xml "listviewcategory" , listview id used in java class "categorylistview".
one thing more that,please make sure there must items in array (eventdetails) @ time of setadapter().
Comments
Post a Comment