2014-01-24 35 views
1

我想實現這樣的場景:如何通過自定義的參數進的onClick監聽

  1. 我得到我的圖片
  2. 我將它們添加到動態滾動型
  3. 爲每個圖像我想補充的OnClick聽衆,所以當我點擊的形象,我得到一個對話框,其中顯示了圖像全屏(基本上,類似的ThickBox在JQuery中)

我的代碼:

decodetByteFullSize = getImageFromApi(); 
    decodedByte=scaleToFitWidth(decodetByteFullSize, photoScroll.getWidth()); 
    String DESIREDTEXT = GetStringFromApi(); 
    ImageView resultImage = new ImageView(this); 
     resultImage.setImageBitmap(decodedByte); 
     resultImage.setPadding(0, 0, 0, 10); 
     resultImage.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       Dialog imagePopup = new Dialog(MainActivity.this); 
       View view = getLayoutInflater().inflate(R.layout.image_layout, null); 
       TextView tv = (TextView) view.findViewById(R.id.tabsText); 
       tv.setText(DESIREDTEXT); 
       ImageView iv = (ImageView)view.findViewById(R.id.tabsImage); 
       iv.setImageBitmap(decodetByteFullSize); 
       imagePopup.setContentView(view); 
       imagePopup.show(); 
      } 
     }); 

     photoScroll.addView(resultImage); 

這個問題 - 如何將DESIRED TEXTdecodetByteFullSize參數傳遞給onClick事件,因爲它對每個圖像都是動態的而且不同的?

在此先感謝!

+0

什麼是「DESIRED TEXT」?你從webservice獲得它? –

+0

這是一個圖像描述,我從Web-Api獲得。我將編輯我的代碼,使其更清晰。 –

回答

2
final ImageView resultImage = new ImageView(this); 
    resultImage.setTag(DESIRED TEXT); 
     resultImage.setImageBitmap(decodedByte); 
     resultImage.setPadding(0, 0, 0, 10); 
     resultImage.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       Dialog imagePopup = new Dialog(MainActivity.this); 
       View view = getLayoutInflater().inflate(R.layout.image_layout, null); 
       TextView tv = (TextView) view.findViewById(R.id.tabsText); 
       tv.setText(resultImage.getTag()); 
       imagePopup.setContentView(view); 
       imagePopup.show(); 
      } 
     }); 
+0

我更喜歡這個。 –

+0

不錯的解決方案,但如果我需要傳遞幾個參數呢?可能不是字符串? –

+0

你能分享你傳遞的全部數據嗎?可能會幫助我解決你的問題 –

1

對想要在onClickListener中訪問的變量使用關鍵字final。 如果通過ScrollView實際上意味着ListView,那麼您可能不希望每次都創建一個新的偵聽器,而應將其放入標籤中,如Digvesh所示。

視圖的標記可用作地圖,使用資源ID作爲關鍵字:resultImage.setTag(R.id.text, GetStringFromApi());,resultImage.setTag(R.id.image, decodeByteFull);。該值然後可以使用resultImage.getTag(R.id.text) & resultImage.getTag(R.id.image);

檢索如果您有一個觀點在你的XML命名文本地方&圖像,那麼你不需要別人做任何事情,但如果你想唯一的ID爲這個目的,你可以使您的res \ values目錄中的ids.xml文件中的ids:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item type="id" name="text" /> 
    <item type="id" name="image" /> 
</resources> 
+0

我的意思是LinearLayout裏面的滾動視圖 - 我在一個垂直列添加圖像。 –

+0

有多少圖片?如果有幾個,你可能會遇到內存問題 - 一個ListView被設計爲通過創建視圖並在需要時創建視圖 – FunkTheMonk

+0

圖像計數從3到10是隨機的。有什麼區別,如果我將ImageView添加到LinearLayout或ListView動態? –