2015-04-26 35 views
0

我有一个自定义的BaseAdapter是加载图像到一个自定义的列表视图使用异步任务的网址,但图像不显示。这里是适配器:ListView项目不加载从url的图像

private class HorizontalAdapter extends BaseAdapter{ 

     public HorizontalAdapter() { 
      super(); 
      final Checkpoint current = localCheckpoints[checkpointPosition]; 
      urls[0] = current.getGallery()[0].getUrl(); 
      urls[1] = current.getYoutube(); 
      urls[2] = current.getSoundcloud(); 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 

     @Override 
     public Object getItem(int position) { 
      return urls[position]; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      String urlToLoad = urls[position]; 

      if(convertView == null){ 
       convertView = LayoutInflater.from(getActivity()).inflate(R.layout.horizontal_listview_item,parent,false); 
      } 

      ImageView imageView = (ImageView)convertView.findViewById(R.id.cp_image); 
      FrameLayout container = (FrameLayout)convertView.findViewById(R.id.youtubeShower); 
      Button playButton = (Button)convertView.findViewById(R.id.playStop); 

      playButton.setVisibility(View.VISIBLE); 

      if(position == 0){ 
       Log.d("horizontalsv","loading image with url: " + urlToLoad); 
       new loadImage(imageView).execute(urlToLoad); 
       //container.setVisibility(View.VISIBLE); 
       imageView.setVisibility(View.VISIBLE); 


      } 
      else if(position == 1){ 
       container.setVisibility(View.VISIBLE); 
       imageView.setVisibility(View.INVISIBLE); 
       String videoId = extractYTId(urlToLoad); 
       PlayYoutubeVideFragment youtubeFrag = PlayYoutubeVideFragment.newInstance(videoId); 
       myContext.getSupportFragmentManager().beginTransaction().replace(R.id.youtubeShower, youtubeFrag).commit(); 

      }else{ 



      } 

      return convertView; 
     } 
    } 

,这里是为ListView项的XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 

    > 

    <FrameLayout 
     android:id="@+id/youtubeShower" 
     android:layout_width="match_parent" 
     android:layout_height="288dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentBottom="true"> 

    </FrameLayout> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/cp_image" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="87dp" 
     android:text="Play" 
     android:id="@+id/playStop" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

这里是怎么了加载图像:

private class loadImage extends AsyncTask<String,Void,Bitmap>{ 

     ImageView target; 

     public loadImage(ImageView imageViewToLoad){ 
      target = imageViewToLoad; 
      if(imageViewToLoad == null){ 
       Log.e("in loadImage","imageview is null"); 
      }else{ 
       Log.d("in loadImage","imageView is there"); 
      } 
     } 

     @Override 
     protected Bitmap doInBackground(String... params) { 
      String urlString = params[0]; 

      try { 
       URL url = new URL(urlString); 
       try { 
        Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
        return bmp; 
       }catch(IOException e){ 
        Log.e("IOException",e.getMessage()); 
        return null; 
       } 

      }catch (MalformedURLException e){ 
       Log.e("URL ERROR", "url = " + urlString + " and error = " + e.getMessage()); 
       return null; 
      } 



     } 

     @Override 
     protected void onPostExecute(Bitmap o) { 
      super.onPostExecute(o); 
      if(o != null){ 
       Log.d("in loadimage","bitmap is not null"); 
       target.setImageBitmap(o); 
       //lvTest.setAdapter(new HorizontalAdapter()); 
      }else{ 
       Log.e("in loadimage","bitmap is null"); 
       target.setImageBitmap(null); 
       target.setBackgroundColor(Color.WHITE); 
      } 
     } 
    } 

是否有任何理由为什么图像不加载?位图在加载图像asynctask中作为NOT NULL返回,所以它应该可以工作。

+0

你只是想加载第一个位置的图像? (“如果位置== 0”行) – Tushar

回答