2013-11-21 1 views
0

저는 화면을 전환하는 앱이 ImageView입니다. 이전 버튼과 다음 버튼이라는 두 개의 버튼이 있습니다. 이 버튼은 ImageView 레이아웃의 이미지를 탐색합니다. 다음 버튼은 완벽하게 작동하지만 이전 버튼이 전혀 작동하지 않습니다. 이전 이미지로 돌아 가지 않습니다. 이것은 내 모든 활동입니다.이전 버튼이 작동하지 않습니다.

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; 
       } 
      } 
     }); 

    } 
} 

감사합니다.

UPDATE 코드 :

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]); 
      } 
     }); 
    } 
} 

그리고 로그 캣 :

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 
+0

충돌이 발생합니까 아니면 아무 것도 수행하지 않습니까? – codeMagic

+0

아니, 그것은 충돌하지 않지만, 내가 그것을 누르면, 그냥 아무것도하지 않습니다 (내 말은, 그것은 이전 이미지로 돌아 가지 않는다). –

답변

1

이전 버튼 = A하고있는 것을 의미 다음 버튼을 클릭한다 - 1 + 1은을 =입니다. 이 문제를 해결하는 해킹 방법은 이전 버튼이 두 개 (a - = 2;)로 돌아가 다음을 클릭하는 것입니다.

모든 리소스를 배열에 넣는 것이 더 나을 수도 있습니다. int [] images = new int [] {R.drawable.stan1, R.drawable.stan2, ...}; 그런 다음 image.setImageResource (images [a]);를 사용하십시오. 대신.

이 시도 :

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]); 
      } 
     });  
    }  
}   
+0

해줘서 고맙지 만 제대로 작동하지 않습니다. 일부 이미지를 살펴보고 이전 버튼을 누르면 실제로 되돌아갑니다. 그러나 다음 버튼을 누를 수 없으면 아무 것도하지 않습니다 (이미지를 탐색 할 수 없음). 그리고 또 다른 문제는 제가 처음 이미지로 돌아갈 수 없다는 것입니다. –

+1

어레이에 넣는 방법을 시도 했습니까? – dr01d3k4

+0

dr01d3k4 도움을 주셔서 감사합니다. 그러나 작동하지 않습니다. 실제로 배열을 사용하여 코드를 업데이트했지만 동일한 방식으로 작동합니다. 이제 이전 버튼을 누르면 다음 버튼을 누를 수 없습니다. 그리고 첫 번째 이미지에 액세스 할 수 없습니다. –

0

사용하는 대신 a--a = a-2. 또는 이전 버튼을 다음과 같은 방식으로 구현하십시오.

관련 문제