2012-03-07 17 views
0

私はAndroidが初めてで、初めてのアプリを作成しようとしています。 ImageViewには2つのボタン(BackとNext)が必要です。ユーザーが[次へ]ボタンをクリックすると、ImageView内のイメージを次のイメージ(サーバー上でホストされているイメージ)に置き換える必要があります。ファイルの名前は1.jpg、2.jpg、3.jpgです。次のコードを使用していますが、何かが動作していません。アクティビティが開始されると、最初のイメージが適切に読み込まれますが、[次へ]ボタンをクリックしても何も起こりません(LogCatでも何も起こりません)。すべてのボタンでImageVIewを更新するには、Webから新しいイメージをクリックしますか?

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の代わりにBitmapを使用する利点は何ですか? –

+0

[リンク](http://stackoverflow.com/a/3375258/935627)と[リンク](http://stackoverflow.com/a/5877202/935627) – slybloty

0

onClick()メソッドは、タップするたびに同じイメージをリロードします。画像とそのリンクを変更する必要があります。 LoadImageFromWeb(String)

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

を変更し、onClick()方法からそれを呼び出します。

+0

こんにちは、ありがとうございました。私はそれを試みたが、私はまだ何かが欠けている。私はこのメソッドをimageView.setImageDrawable(image); –

関連する問題