Reputation: 1772
I have an app which just switching screens with ImageView
. And I have two buttons: Previous and Next. These buttons navigate through Images in the ImageView
layout. My Next button works perfectly fine, but the Previous button doesn't work at all. it doesn't go back to the Previous Image. This is my whole activity:
public class StanActivity extends Activity {
ImageView image;
Button next;
int a = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.stan_xml);
image = (ImageView) findViewById(R.id.imageView1);
next = (Button) findViewById(R.id.next);
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch (view.getId()) {
case R.id.next:
if (a == 0) {
image.setImageResource(R.drawable.stan1);
a = 1;
} else if (a == 1) {
image.setImageResource(R.drawable.stan2);
a = 2;
} else if (a == 2) {
image.setImageResource(R.drawable.stan3);
a = 3;
} else if (a == 3) {
image.setImageResource(R.drawable.stan4);
a = 4;
} else if (a == 4) {
image.setImageResource(R.drawable.stan5);
a = 5;
} else if (a == 5) {
image.setImageResource(R.drawable.stan6);
a = 6;
} else if (a == 6) {
image.setImageResource(R.drawable.stan7);
a = 7;
} else if (a == 7) {
image.setImageResource(R.drawable.stan8);
a = 8;
} else if (a == 8) {
image.setImageResource(R.drawable.finalstan);
a = 9;
next.setVisibility(View.GONE);
}
}
}
});
Button previous = (Button) findViewById(R.id.prev);
previous.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch (view.getId()) {
case R.id.prev:
a--;
next.performClick();
break;
}
}
});
}
}
Thank you for any help.
UPDATE CODE:
public class StanActivity extends Activity {
public int currentImage = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stan_xml);
final int[] images = new int[] { R.drawable.stan1, R.drawable.stan2,
R.drawable.stan3, R.drawable.stan4, R.drawable.stan5,
R.drawable.stan6, R.drawable.stan7, R.drawable.stan8 };
final ImageView image = (ImageView) findViewById(R.id.imageView1);
final Button next = (Button) findViewById(R.id.next);
final Button previous = (Button) findViewById(R.id.prev);
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
currentImage++;
if (currentImage >= images.length) {
currentImage = images.length;
next.setVisibility(View.GONE);
}
previous.setVisibility(View.VISIBLE);
image.setImageResource(images[currentImage]); /* ERROR IN THIS LINE */
}
});
previous.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
currentImage--;
if (currentImage <= 0) {
currentImage = 0;
previous.setVisibility(View.GONE);
}
next.setVisibility(View.VISIBLE);
image.setImageResource(images[currentImage]);
}
});
}
}
And LogCat :
11-21 22:16:18.101: D/dalvikvm(22524): GC_FOR_ALLOC freed 3193K, 12% free 61564K/69760K, paused 34ms, total 34ms
11-21 22:16:18.611: D/dalvikvm(22524): GC_FOR_ALLOC freed 3032K, 15% free 61512K/71660K, paused 21ms, total 21ms
11-21 22:16:18.611: I/dalvikvm-heap(22524): Grow heap (frag case) to 67.738MB for 2492416-byte allocation
11-21 22:16:19.341: D/dalvikvm(22524): GC_FOR_ALLOC freed 2979K, 17% free 61955K/74096K, paused 13ms, total 13ms
11-21 22:16:20.191: D/AndroidRuntime(22524): Shutting down VM
11-21 22:16:20.191: W/dalvikvm(22524): threadid=1: thread exiting with uncaught exception (group=0x417c5898)
11-21 22:16:20.191: E/AndroidRuntime(22524): FATAL EXCEPTION: main
11-21 22:16:20.191: E/AndroidRuntime(22524): java.lang.ArrayIndexOutOfBoundsException: length=8; index=8
11-21 22:16:20.191: E/AndroidRuntime(22524): at deimantasb.howtodrawsouthpark.StanActivity$1.onClick(StanActivity.java:37)
11-21 22:16:20.191: E/AndroidRuntime(22524): at android.view.View.performClick(View.java:4475)
11-21 22:16:20.191: E/AndroidRuntime(22524): at android.view.View$PerformClick.run(View.java:18784)
11-21 22:16:20.191: E/AndroidRuntime(22524): at android.os.Handler.handleCallback(Handler.java:730)
11-21 22:16:20.191: E/AndroidRuntime(22524): at android.os.Handler.dispatchMessage(Handler.java:92)
11-21 22:16:20.191: E/AndroidRuntime(22524): at android.os.Looper.loop(Looper.java:137)
11-21 22:16:20.191: E/AndroidRuntime(22524): at android.app.ActivityThread.main(ActivityThread.java:5414)
11-21 22:16:20.191: E/AndroidRuntime(22524): at java.lang.reflect.Method.invokeNative(Native Method)
11-21 22:16:20.191: E/AndroidRuntime(22524): at java.lang.reflect.Method.invoke(Method.java:525)
11-21 22:16:20.191: E/AndroidRuntime(22524): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
11-21 22:16:20.191: E/AndroidRuntime(22524): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
11-21 22:16:20.191: E/AndroidRuntime(22524): at dalvik.system.NativeStart.main(Native Method)
11-21 22:21:30.321: I/Process(22524): Sending signal. PID: 22524 SIG: 9
Upvotes: 0
Views: 179
Reputation: 91
Your previous button is clicking the next button which means that it's doing a = a - 1 + 1 = a. A hacky way of solving this is for the previous button to go back two (a -= 2;) and then click next.
It might be better to put all the resources into an array: int[] images = new int[] {R.drawable.stan1, R.drawable.stan2, ...}; And then use image.setImageResource(images[a]); instead.
Try this:
public class StanActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stan_xml);
long[] images = new long[] {R.drawable.stan1, R.drawable.stan2, R.drawable.stan3 /* etc */};
int currentImage = 0;
ImageView image = (ImageView) findViewById(R.id.imageView1);
Button next = (Button) findViewById(R.id.next);
Button previous = (Button) findViewById(R.id.prev);
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
currentImage++;
if (currentImage >= images.length - 1) {
currentImage = images.length - 1;
next.setVisibility(View.GONE);
}
previous.setVisibility(View.VISIBLE);
image.setImageResource(images[currentImage]);
}
});
previous.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
currentImage--;
if (currentImage <= 0) {
currentImage = 0;
previous.setVisibility(VIEW.GONE);
}
next.setVisibility(View.VISIBLE);
image.setImageResource(images[currentImage]);
}
});
}
}
Upvotes: 1
Reputation: 97
use a = a-2
instead of a--
. or implement the previous button like the way you did for next.
Upvotes: 0