2012-03-07 73 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