android - Displaying pictures stored on the SD Card using a Gridview -
i relatively new android , need one. trying write code display pictures on sd card using gridview, far when run application textview @ top shown. know if there serious flaw in logic of code in main activity code, image adapter class code or both. code:
package com.newtestforsdcarddisplay; import android.app.activity; import android.os.bundle; import android.database.cursor; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.view.view; import android.widget.gridview; import android.widget.adapterview; import android.widget.toast; import android.provider.mediastore; import android.provider.mediastore.images.thumbnails; import android.net.uri; import android.widget.adapterview.onitemclicklistener; public class mainactivity extends activity { public cursor myimagecursor; public int columnnumber; /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); string[] imageids = new string[]{thumbnails._id}; uri myimagessource = mediastore.images.media.external_content_uri; myimagecursor = managedquery(myimagessource, imageids, null, null, mediastore.images.thumbnails._id); columnnumber = myimagecursor.getcolumnindexorthrow(mediastore.images.media._id); gridview phoneimageview = (gridview)findviewbyid(r.id.sdcard); phoneimageview.setadapter(new imageadapter(this)); phoneimageview.setonitemclicklistener(new onitemclicklistener() { public void onitemclick(adapterview<?> parent, view v, int position, long id) { string[] data = { mediastore.images.media.data }; cursor viewimagecursor = managedquery( mediastore.images.media.external_content_uri, data, null, null, mediastore.images.thumbnails._id ); int imagecolumnindex = viewimagecursor.getcolumnindexorthrow(mediastore.images.media.data); viewimagecursor.movetoposition(position); viewimagecursor.movetofirst(); string filepath = viewimagecursor.getstring(imagecolumnindex); toast.maketext(mainactivity.this, filepath, toast.length_long).show(); bitmap yourselectedimage = bitmapfactory.decodefile(filepath); } }); } }
package com.newtestforsdcarddisplay; import android.content.context; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.gridview; import android.widget.imageview; import android.net.uri; import android.provider.mediastore; public class imageadapter extends baseadapter{ final mainactivity pca = new mainactivity(); private context context; public imageadapter(context localcontext) { // context = localcontext; } public int getcount() { // return pca.myimagecursor.getcount(); return 0; } public object getitem(int position) { return position; } public long getitemid(int position) { return position; } public view getview(int position, view convertview, viewgroup parent) { imageview picturesview; if (convertview == null) { picturesview = new imageview(context); // move cursor current position pca.myimagecursor.movetoposition(position); // current value requested column int imageid = pca.myimagecursor.getint(pca.columnnumber); // set content of image based on provided uri picturesview.setimageuri(uri.withappendedpath( mediastore.images.media.external_content_uri, "" + imageid)); picturesview.setscaletype(imageview.scaletype.fit_center); picturesview.setpadding(8, 8, 8, 8); picturesview.setlayoutparams(new gridview.layoutparams(100, 100)); } else { picturesview = (imageview)convertview; } return picturesview; } } package com.newtestforsdcarddisplay; import android.content.context; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.gridview; import android.widget.imageview; import android.net.uri; import android.provider.mediastore; public class imageadapter extends baseadapter{ final mainactivity pca = new mainactivity(); private context context; public imageadapter(context localcontext) { // context = localcontext; } public int getcount() { // return pca.myimagecursor.getcount(); return 0; } public object getitem(int position) { return position; } public long getitemid(int position) { return position; } public view getview(int position, view convertview, viewgroup parent) { imageview picturesview; if (convertview == null) { picturesview = new imageview(context); // move cursor current position pca.myimagecursor.movetoposition(position); // current value requested column int imageid = pca.myimagecursor.getint(pca.columnnumber); // set content of image based on provided uri picturesview.setimageuri(uri.withappendedpath( mediastore.images.media.external_content_uri, "" + imageid)); picturesview.setscaletype(imageview.scaletype.fit_center); picturesview.setpadding(8, 8, 8, 8); picturesview.setlayoutparams(new gridview.layoutparams(100, 100)); } else { picturesview = (imageview)convertview; } return picturesview; } }
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <gridview android:id="@+id/sdcard" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:verticalspacing="10dp" android:horizontalspacing="10dp" android:numcolumns="auto_fit" android:columnwidth="90dp" android:stretchmode="columnwidth" android:gravity="center" /> </linearlayout>
could me please???? said before, new android , have been struggling long time. appreciated.
do still need question?
what create "root" layout this
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <include layout="@layout/my_header"/> <include layout="@layout/my_grid"/> </linearlayout>
in my_header.xml, set textview in linear layout.
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"> <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </linearlayout>
then in my_grid.xml, setup gridview
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"> <gridview android:id="@+id/sdcard" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:verticalspacing="10dp" android:horizontalspacing="10dp" android:numcolumns="auto_fit" android:columnwidth="90dp" android:stretchmode="columnwidth" android:gravity="center" /> </linearlayout>
good luck
Comments
Post a Comment