2012-03-07 71 views
0

我是新來的Android,並試圖創建我的第一個應用程序。它應該有一個ImageView和兩個按鈕(Back和Next)。當用戶點擊Next按鈕時,ImageView中的圖像應該替換爲下一個圖像(託管在我的服務器上)。這些文件的名稱是1.jpg,2.jpg,3.jpg ...我正在使用下面的代碼,但有些東西不起作用。當活動開始時,第一個圖像被正確加載,但是當我點擊下一步按鈕時,什麼都沒有發生(LogCat中也沒有)。如何刷新ImageVIew每個按鈕點擊與從網絡上的新圖像?

public class slidesActivity extends Activity { 

private ImageView imageView; 
private int imageNumber = 1; 
private String plakatiUrl = "http://plakati.bg/" + 
           Integer.toString(imageNumber) + ".jpg"; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.slides); 

    final Drawable image = LoadImageFromWeb(plakatiUrl); 
    imageView = new ImageView(getBaseContext()); 
    imageView = (ImageView) findViewById(R.id.imageView1); 
    imageView.setImageDrawable(image); 

    Button nextButton = (Button) findViewById(R.id.nextBtn); 
    nextButton.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      imageNumber++; 

      // Have to find why 
      imageView.setImageDrawable(image); 
      // is not working here 
     } 
    }); 

private Drawable LoadImageFromWeb(String url) { 
    try { 
     InputStream is = (InputStream) new URL(url).getContent(); 
     Drawable d = Drawable.createFromStream(is, "src name"); 
     return d; 
    } catch (Exception e) { 
     System.out.println("Exc=" + e); 
     return null; 
    } 
} 
} 

我知道我不得不作出這樣在不同的線程,所以我沒有得到一個ANR,但還是我在這裏失去了一些東西。 任何人都可以幫助我,請!

回答

0

這適用於我。不過,你可以清理它。

public class TestAppActivity extends Activity { 

    private ImageView imageView; 
    private int imageNumber = 1; 
    private String plakatiUrl = "http://plakati.bg/"; 
    private Drawable image = null; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.slides); 

     image = LoadImageFromWeb(generateUrlString(plakatiUrl, imageNumber)); 
     imageView = new ImageView(getBaseContext()); 
     imageView = (ImageView) findViewById(R.id.imageView1); 
     imageView.setImageDrawable(image); 

     Button nextButton = (Button) findViewById(R.id.nextBtn); 
     nextButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       imageNumber++; 

       image = LoadImageFromWeb(generateUrlString(plakatiUrl, imageNumber)); 

       imageView.setImageDrawable(image); 
      } 
     }); 

    } 

    private Drawable LoadImageFromWeb(String url) { 
     Drawable d = null; 

     InputStream is; 
     try { 
      is = (InputStream) new URL(url).getContent(); 
      d = Drawable.createFromStream(is, "src name"); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return d; 
    } 

    private String generateUrlString(String str, int n) { 

     return str + Integer.toString(n) + ".jpg"; 
    } 
} 

另外,我建議使用Bitmap,而不是Drawable。而且,我注意到您將LoadImageFromWeb()方法放入onCreate()

+0

太棒了! 它正在工作!謝謝您的幫助。使用位圖代替Drawable有什麼好處? – 2012-03-08 19:04:07

+0

檢查這些鏈接:[鏈接](http://stackoverflow.com/a/3375258/935627)和[鏈接](http://stackoverflow.com/a/5877202/935627) – slybloty 2012-03-08 19:13:22

0

您的onClick()方法會在每次點擊時重新加載相同的圖像。您需要修改您的圖片及其鏈接。更改LoadImageFromWeb(String)

LoadImageFromWeb(String url, int imageNumber) 
{ 
    String plakatiUrl = url + Integer.toString(imageNumber) + ".jpg"; 
    //... 
} 

而且從onClick()方法調用它。

+0

嗨,感謝您的幫助。我嘗試過,但我仍然失去了一些東西。我是不是調用方法:imageView.setImageDrawable(image); – 2012-03-08 16:53:43