android - List View Not getting populated and getview not getting called -
hello making music player , in main activity have 3 fragments , below fragment have linear layout show name , image of current song.
now problem in 1st fragment list view not getting populated because getview not getting called.
logcat showing no errors not getting populated.
mainactivity.java
package com.example.scrolltabs; import java.util.arraylist; import android.content.contentresolver; import android.database.cursor; import android.os.bundle; import android.provider.mediastore; import android.support.v4.app.fragment; import android.support.v4.app.fragmentactivity; import android.support.v4.app.fragmentmanager; import android.support.v4.app.fragmentstatepageradapter; import android.support.v4.view.viewpager; import android.util.log; import com.example.scrolltabs.fragmenta; import com.example.scrolltabs.fragmentb; import com.example.scrolltabs.fragmentc; public class mainactivity extends fragmentactivity { viewpager viewpager=null; static arraylist<string> data ; static arraylist<string> artist ; static arraylist<string> album ; static arraylist<string> title ; static arraylist<string> displayname ; @override protected void oncreate(bundle arg0) { // todo auto-generated method stub super.oncreate(arg0); setcontentview(r.layout.activity_main); data = new arraylist<string>(); artist = new arraylist<string>(); album = new arraylist<string>(); title = new arraylist<string>(); displayname = new arraylist<string>(); getmycursor(); viewpager=(viewpager) findviewbyid(r.id.pager); fragmentmanager fm=getsupportfragmentmanager(); viewpager.setadapter(new myadapter(fm)); } public static arraylist<string> getdataarraylist() { return data; } public static arraylist<string> getartistarraylist() { return artist; } public static arraylist<string> getalbumarraylist() { return album; } public static arraylist<string> gettitlearraylist() { return title; } public static arraylist<string> getdisplaynamearraylist() { return displayname; } public cursor getmycursor() { log.v("jay","sav pela"); /* string[] columns = { android.provider.mediastore.audio.albums._id, android.provider.mediastore.audio.albums.album }; cursor cursor = getcontentresolver().query( mediastore.audio.albums.external_content_uri, columns, null, null, null); if (cursor.movetofirst()) { { string[] column = { mediastore.audio.media.data, mediastore.audio.media._id, mediastore.audio.media.title, mediastore.audio.media.display_name, mediastore.audio.media.mime_type, mediastore.audio.media.album, mediastore.audio.media.artist, }; string = android.provider.mediastore.audio.media.album + "=?"; string orderby = android.provider.mediastore.audio.media.title; cursor cursor = getcontentresolver().query(mediastore.audio.media.external_content_uri, column,null,null, orderby); int songcount=0; if (cursor.movetofirst()) { { songcount++; string s_title =cursor.getstring(cursor.getcolumnindex(mediastore.audio.media.title)); title.add(s_title); string s_displayname=cursor.getstring(cursor.getcolumnindex(mediastore.audio.media.display_name)); displayname.add(s_displayname); string s_data=cursor.getstring(cursor.getcolumnindex(mediastore.audio.media.data)); data.add(s_data); string s_album=cursor.getstring(cursor.getcolumnindex(mediastore.audio.media.album)); album.add(s_album); string s_artist=cursor.getstring(cursor.getcolumnindex(mediastore.audio.media.artist)); artist.add(s_artist); } while (cursor.movetonext()); } log.v("jay",songcount+""); return cursor; } } class myadapter extends fragmentstatepageradapter { public myadapter(fragmentmanager fm) { super(fm); // todo auto-generated constructor stub } @override public fragment getitem(int arg0) { fragment fragment=null; if(arg0==0) { fragment= new fragmenta(); } else if(arg0==1) { fragment=new fragmentb(); } else if(arg0==2) { fragment=new fragmentc(); } return fragment; } @override public int getcount() { // todo auto-generated method stub return 3; } @override public charsequence getpagetitle(int position) { if(position==0) { return "all songs"; } else if(position==1) { return "tab2"; } else if(position==2) { return "tab3"; } return null; } } activity_main.xml layout
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.viewpager android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/pager" android:layout_weight="2" > <android.support.v4.view.pagertitlestrip android:layout_height="wrap_content" android:layout_width="match_parent" android:background="#000000" android:id="@+id/title" android:layout_gravity="top" android:paddingtop="20dp" android:paddingbottom="4dp" android:textcolor="#ffffff" > </android.support.v4.view.pagertitlestrip> </android.support.v4.view.viewpager> <linearlayout android:layout_width="match_parent" android:layout_height="100dp" android:layout_weight="1" android:background="#5edfe5" android:clickable="true" android:orientation="horizontal" > <imageview android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left|center" android:contentdescription="albumart" android:src="@android:drawable/ic_media_play" /> <textview android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left|center" android:gravity="center" android:text="textview" /> </linearlayout> </linearlayout> fragmenta.java
package com.example.scrolltabs; import java.util.arraylist; import android.content.context; import android.os.bundle; import android.support.annotation.nullable; import android.support.v4.app.fragment; import android.support.v4.app.listfragment; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.listview; import android.widget.textview; public class fragmenta extends listfragment { view view=null; @override public view oncreateview(layoutinflater inflater, @nullable viewgroup container, @nullable bundle savedinstancestate) { // todo auto-generated method stub view rootview = inflater.inflate(r.layout.fragmentlayout1,container,false); view=rootview; return rootview; } @override public void onactivitycreated(@nullable bundle savedinstancestate) { // todo auto-generated method stub super.onactivitycreated(savedinstancestate); log.v("jay","onactivitycreated"); listview listview = (listview) view.findviewbyid(android.r.id.list) ; mylistadapter adapter = new mylistadapter(getactivity().getapplicationcontext(),r.layout.fragmentlayout1); listview.setadapter(adapter); } } class mylistadapter extends arrayadapter<string>{ arraylist<string> data ; arraylist<string> artist ; arraylist<string> album ; arraylist<string> title ; arraylist<string> displayname ; public mylistadapter(context applicationcontext, int fragmentlayout1) { // todo auto-generated constructor stub super(applicationcontext, fragmentlayout1); log.v("jay","in adapter"); data=com.example.scrolltabs.mainactivity.getdataarraylist(); artist=com.example.scrolltabs.mainactivity.getartistarraylist(); album=com.example.scrolltabs.mainactivity.getalbumarraylist(); title=com.example.scrolltabs.mainactivity.gettitlearraylist(); displayname=com.example.scrolltabs.mainactivity.getdisplaynamearraylist(); } @override public view getview(int position, view convertview, viewgroup parent) { log.v("jay","in view"); layoutinflater inf = (layoutinflater) convertview.getcontext().getsystemservice(convertview.getcontext().layout_inflater_service); view row = inf.inflate(r.layout.peritem, parent, false); textview title_tv = (textview) row.findviewbyid(r.id.titletextview); textview artist_tv = (textview) row.findviewbyid(r.id.artisttextview); title_tv.settext(title.get(position)); artist_tv.settext(artist.get(position)); return row; } } fragmentlayout1.xml fragment 1's layout
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <listview android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerhorizontal="true" android:layout_centervertical="true" > </listview> </linearlayout> per_item.xml (layout each item in list in fragment 1)
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <textview android:id="@+id/titletextview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="large text" android:textappearance="?android:attr/textappearancelarge" /> <textview android:id="@+id/artisttextview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="small text" android:textappearance="?android:attr/textappearancesmall" /> </linearlayout>
when initialize mylistadapter, using constructor. second argument resource id:
the resource id layout file containing textview use when instantiating views. don't need this, because inflate item view manually:
view row = inf.inflate(r.layout.peritem, parent, false); try use this:
super(context, 0, data); upd. try in mylistadapter constructor:
super(context, 0); upd. 2 try setlistadapter(adapter) instead of listview.setadapter(adapter);
upd. 3 android docs:
you must use listfragment.setlistadapter() associate list adapter. not directly call listview.setadapter() or else important initialization skipped.
Comments
Post a Comment