2013-11-21 54 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; 
       } 
      } 
     }); 

    } 
} 

謝謝你的任何幫助。

更新代碼:

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

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

它崩潰還是什麼都不做? – codeMagic

+0

不,它不會崩潰,但是當我按下它時,它只是沒有做任何事情(我的意思是,它不會回到上一張圖片)。 –

回答

1

你以前的按鈕被點擊下一步按鈕,這意味着它在做A = 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

謝謝你的答案,但它不能正常工作。當我瀏覽一些圖片並按下Prev按鈕時,它實際上會返回,但是當我無法按下Next按鈕時,它什麼都不做(我無法瀏覽圖片)。另一個問題是我無法回到第一張圖片。 –

+1

你有沒有嘗試將它們放入數組的方法? – dr01d3k4

+0

感謝您的幫助dr01d3k4,但它不起作用。我更新了實際使用數組的代碼,但它的工作方式相同。現在當我按下Prev按鈕時,我不能按Next按鈕。我無法訪問第一張圖片。 –

0

使用a = a-2代替a--。或執行上一個按鈕,就像您爲未來所做的那樣。