gridview - Shuffle Array images in android -
i developing android application need shuffle images stored in array using random function before assigning adapter. have following code on how shuffle array images, encounters error
mainactivity.java:
public class mainactivity extends activity { context ctx; boolean flage=false; int img1=-1,img2=-1; public int originalarray[] = { r.drawable.sample_0, r.drawable.sample_1, r.drawable.sample_2, r.drawable.sample_3,r.drawable.sample_0, r.drawable.sample_1, r.drawable.sample_2, r.drawable.sample_3 }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); shufflearray(); final gridview grid = (gridview) findviewbyid(r.id.gv_memory); grid.setadapter(new gridviewcontent(this)); } private void shufflearray() { // todo auto-generated method stub random arrayrandom= new random(); for(int i=0; i<originalarray.length-1; i++){ int index=arrayrandom.nextint(i); originalarray[i]=originalarray[index]; } } public class gridviewcontent extends baseadapter { private context context; public int picturearray[]={ r.drawable.question, r.drawable.question, r.drawable.question, r.drawable.question, r.drawable.question, r.drawable.question, r.drawable.question, r.drawable.question, }; public gridviewcontent(context c){ context=c; } @override public int getcount() { // todo auto-generated method stub return (picturearray.length); } @override public object getitem(int position) { // todo auto-generated method stub return picturearray[position]; } @override public long getitemid(int position) { // todo auto-generated method stub return 0; } @override public view getview(final int position, view arg1, viewgroup arg2) { // todo auto-generated method stub final imageview myimage=new imageview(context); myimage.setimageresource(picturearray[position]); myimage.setscaletype(imageview.scaletype.center_inside); myimage.setlayoutparams(new gridview.layoutparams(70, 70)); myimage.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub //toast.maketext(context, string.valueof(position), toast.length_short).show(); myimage.setimageresource(originalarray[position]); if(flage==false) { img1=originalarray[position]; flage=true; }else if(flage==true){ img2=originalarray[position]; checkresult(); flage=false; } //else if(f) } }); return myimage; } } public void checkresult() { if(img1==img2) { toast.maketext(mainactivity.this, "congratualatin !!!!", toast.length_long).show(); } else{ toast.maketext(mainactivity.this, "sorry!!!!", toast.length_long).show(); final gridview grid = (gridview) findviewbyid(r.id.gv_memory); grid.setadapter(new gridviewcontent(this)); } } } logcat......
03-12 05:40:31.904: d/dalvikvm(1081): gc_for_alloc freed 58k, 8% free 2771k/3000k, paused 198ms, total 201ms 03-12 05:40:31.914: i/dalvikvm-heap(1081): grow heap (frag case) 3.943mb 1127536-byte allocation 03-12 05:40:31.965: d/dalvikvm(1081): gc_for_alloc freed 2k, 6% free 3870k/4104k, paused 47ms, total 47ms 03-12 05:40:32.014: d/androidruntime(1081): shutting down vm 03-12 05:40:32.014: w/dalvikvm(1081): threadid=1: thread exiting uncaught exception (group=0x41465700) 03-12 05:40:32.024: e/androidruntime(1081): fatal exception: main 03-12 05:40:32.024: e/androidruntime(1081): java.lang.runtimeexception: unable start activity componentinfo{com.example.memoryforkids/com.example.memoryforkids.mainactivity}: java.lang.illegalargumentexception: n <= 0: 0 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activitythread.performlaunchactivity(activitythread.java:2211) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activitythread.handlelaunchactivity(activitythread.java:2261) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activitythread.access$600(activitythread.java:141) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activitythread$h.handlemessage(activitythread.java:1256) 03-12 05:40:32.024: e/androidruntime(1081): @ android.os.handler.dispatchmessage(handler.java:99) 03-12 05:40:32.024: e/androidruntime(1081): @ android.os.looper.loop(looper.java:137) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activitythread.main(activitythread.java:5103) 03-12 05:40:32.024: e/androidruntime(1081): @ java.lang.reflect.method.invokenative(native method) 03-12 05:40:32.024: e/androidruntime(1081): @ java.lang.reflect.method.invoke(method.java:525) 03-12 05:40:32.024: e/androidruntime(1081): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:737) 03-12 05:40:32.024: e/androidruntime(1081): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) 03-12 05:40:32.024: e/androidruntime(1081): @ dalvik.system.nativestart.main(native method) 03-12 05:40:32.024: e/androidruntime(1081): caused by: java.lang.illegalargumentexception: n <= 0: 0 03-12 05:40:32.024: e/androidruntime(1081): @ java.util.random.nextint(random.java:175) 03-12 05:40:32.024: e/androidruntime(1081): @ com.example.memoryforkids.mainactivity.shuffarray(mainactivity.java:47) 03-12 05:40:32.024: e/androidruntime(1081): @ com.example.memoryforkids.mainactivity.oncreate(mainactivity.java:38) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activity.performcreate(activity.java:5133) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1087) 03-12 05:40:32.024: e/androidruntime(1081): @ android.app.activitythread.performlaunchactivity(activitythread.java:2175) 03-12 05:40:32.024: e/androidruntime(1081): ... 11 more
first need convert array arraylist , can apply collection.shuffle() on it.
here below lines convert int array of pictures arraylist of integer.
list<integer> pictures = new arraylist<integer>(); (int index = 0; index < originalarray.length; index++) { pictures.add(originalarray[index]); } then use collection.shuffle() on it.
collections.shuffle(pictures); and in getview method can use following way.
myimage.setimageresource(pictures.get(position));
Comments
Post a Comment