2013-04-26 67 views
1

我试图创建一个带有小图像的ImageView列表,并通过点击来显示大图。我在AsyncTask中使用解析器从站点下载。只有右键使用HashMap中的值

第一步(“doInBackground”)解析器从小图像读取URL并将它们放到ArrayList<HashMap<String, String>>。我使用密钥“imgUrlSmall”

然后从大图像读取URL并放入相同的ArrayList。使用键“imgUrlBig”

在“onPostExecute”它创造了ImageViews并设置图像imageViewArray[i].setImageDrawable(grabImageFromUrl(text));

然后将其设置在ClickListener,在通过点击图片就开始新的活动,并把那里的大图像的URL。

现在程序显示所有图像(大和小)。如何将imageViewArray放入只有值为“imgUrlSmall”的值。并把正确的价值放在?

也许是一些验证,就像如果map.containsKey?

对于第二部分,以使putExtra也许把所有的值与关键“imgUrlBig”以非标准ArrayList<String>,然后通过点击图像使用v.getId()

对不起,我的英语

这里的所有代码:

doInBackground

protected ArrayList<HashMap<String, String>> doInBackground(String... params) { 
      ArrayList<HashMap<String, String>> imgItems = new ArrayList<HashMap<String, String>>(); 
       /* --First Parser-- */ 
       HtmlCleaner htmlCleaner = new HtmlCleaner(); 
       URL url = new URL(BLOG_URL); 
       TagNode root = htmlCleaner.clean(url); 
       Object[] statsNode3 = root.evaluateXPath(XPATH_STATS3); 

       for (Object tag : statsNode3){ 
         TagNode aTag = (TagNode) tag; 
         String href = aTag.getAttributeByName("src").trim(); 

         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put("imgUrlSmall", href); 

         // adding HashList to ArrayList 
         imgItems.add(map); 
       } 
       /* --Second Parser-- */ 
       HtmlCleaner htmlCleaner2 = new HtmlCleaner(); 
       URL url2 = new URL(BLOG_URL); 
       TagNode root2 = htmlCleaner2.clean(url2); 

       Object[] statsNode_Full_Image = root2.evaluateXPath(XPATH_STATS4); 
       for (Object tag : statsNode_Full_Image){ 
         TagNode aTag = (TagNode) tag; 
         String href = aTag.getAttributeByName("href").trim(); 

         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put("imgUrlBig", href); 

         // adding HashList to ArrayList 
         imgItems.add(map); 
         } 

     return imgItems; 

    } 

onPostExecute

protected void onPostExecute(ArrayList<HashMap<String, String>> imgItems) { 
String text=""; 
int i=0;  
ImageView[] imageViewArray = new ImageView[imgItems.size()]; 
    for (HashMap<String, String> map : imgItems) 
     for (Entry<String, String> mapEntry : map.entrySet()) 
      { 
       text = mapEntry.getValue(); 
       // create ImageView 
       imageViewArray[i] = new ImageView(Test4.this); 
       RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(50,50); 
       imageViewArray[i].setImageDrawable(grabImageFromUrl(text)); 
       imageViewArray[i].setOnClickListener(new OnClickListener() 
        { 
         @Override 
         public void onClick(View v) { 
          System.out.println(v.getId()); 
          Intent intent = new Intent(v.getContext(), Full_Image_Activity.class); 
          intent.putExtra("imgUrlBig", url); //Here i don`t know how to put the url 
          startActivityForResult(intent, 0); 

         } 
        }); 

       // Let's get the root layout and add our ImageView 
       RelativeLayout layout = (RelativeLayout) findViewById(R.id.moreImages); 
       layout.addView(imageViewArray[i], params); 
       i++; 
       } 

}

回答

0

你应该CRE吃了两个网站的类,然后你可以使用ArrayList<HashMap<String, YourImageClass>>
类应该是这样的

public class YourImageClass{ 
public String smallImageUrl; 
public String bigImageUrl; 
public String someNameOfImageMaybe; 
etc. 
}