1

我使用自定義ListView編寫代碼。在ListView中,我有一個隱藏在某些情況下的textView。當我向下滾動視圖時,一切正常。但是,當我滾動查看所有textVie隱藏。我知道這與設置元素標籤有關。我試圖從不同的側面的例子,但是,TextView的公司總是消失:( 我的自定義代碼ArrayAdapter:滾動列表視圖時的數據解釋不正確

class WallpapersListAdapter extends ArrayAdapter<Wallpaper> { 
    private List<Wallpaper> wallpapersContainer; 
    private ImageLoader imageLoader; 
    private DisplayImageOptions imageLoaderOptions; 

public WallpapersListAdapter(Context context, List<Wallpaper> wallpapersContainer) { 
    super(context, R.layout.wallpaper_view, wallpapersContainer); 
    this.wallpapersContainer = wallpapersContainer; 
    setImageLoaderOptions(); 
} 

private void setImageLoaderOptions() { 
    imageLoaderOptions = new DisplayImageOptions.Builder() 
      //.showImageOnLoading(R.drawable.place_holder) 
      //.showImageForEmptyUri(R.drawable.question) 
      //.showImageOnFail(R.drawable.big_problem) 
      .imageScaleType(ImageScaleType.EXACTLY) 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .build(); 
    imageLoader = ImageLoader.getInstance(); 
} 

@Override 
public int getCount() { 
    return wallpapersContainer.size(); 
} 

@Override 
public Wallpaper getItem(int position) { 
    Wallpaper wallpaper = wallpapersContainer.get(position); 
    return wallpaper; 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View itemView = convertView; 
    WallpaperViewHolder currentWallpaperViewHolder; 
    //   do we have a view 
    if (convertView == null) { 
//    we don't have a view so create one by inflating the layout 
     itemView = LayoutInflater.from(getContext()).inflate(R.layout.wallpaper_view, parent, false); 
     itemView.getLayoutParams().height = parent.findViewById(R.id.wallpapers_list_view).getMeasuredHeight(); 
     currentWallpaperViewHolder = getWallpaperViewHolder(itemView); 
//    set the tag for this view to the current person view holder 
     itemView.setTag(currentWallpaperViewHolder); 
     itemView.setTag(R.id.wallpaper_author, currentWallpaperViewHolder.wallpaperAuthor); 
     itemView.setTag(R.id.wallpaper_site, currentWallpaperViewHolder.wallpaperSite); 
    } else { 
//    we have a view so get the tagged view 
     currentWallpaperViewHolder = (WallpaperViewHolder) itemView.getTag(); 
    } 
    currentWallpaperViewHolder.wallpaperAuthor.setTag(position); 
    currentWallpaperViewHolder.wallpaperSite.setTag(position); 
    setWallpaperViewContent(wallpapersContainer.get(position), currentWallpaperViewHolder); 
    return itemView; 
} 

private void setWallpaperViewContent(Wallpaper wallpaper, WallpaperViewHolder wallpaperViewHolder) { 
    String authorName = wallpaper.getAuthorName(); 
    String authorSite = wallpaper.getAuthorSite(); 
    if (authorName == null) { 
     wallpaperViewHolder.wallpaperAuthor.setVisibility(View.GONE); 
    } else { 
     wallpaperViewHolder.wallpaperAuthor.setText(getContext().getString(R.string.wallpaper_author_name) + " " + authorName); 
    } 
    if (authorSite == null) { 
     wallpaperViewHolder.wallpaperSite.setVisibility(View.GONE); 
    } else { 
     wallpaperViewHolder.wallpaperSite.setText(getContext().getString(R.string.wallpaper_author_site) + " " + authorSite); 
    } 
    wallpaperViewHolder.wallpaperDateForUse.setText(wallpaper.getDateForUse()); 
    imageLoader.displayImage(
      wallpaper.getHDUrl()//the drawable 
      , wallpaperViewHolder.imageViewWallpaper//the image view 
      , imageLoaderOptions);//the display options 
} 

private WallpaperViewHolder getWallpaperViewHolder(View itemView) { 
    WallpaperViewHolder wallpaperViewHolder = new WallpaperViewHolder(); 
    wallpaperViewHolder.wallpaperDateForUse 
      = (TextView) itemView.findViewById(R.id.wallpaper_date_for_use); 
    wallpaperViewHolder.imageViewWallpaper 
      = (ImageView) itemView.findViewById(R.id.wallpaper_image); 
    wallpaperViewHolder.wallpaperAuthor 
      = (TextView) itemView.findViewById(R.id.wallpaper_author); 
    wallpaperViewHolder.wallpaperSite 
      = (TextView) itemView.findViewById(R.id.wallpaper_site); 
    wallpaperViewHolder.setWallpaperBtn 
      = (Button) itemView.findViewById(R.id.wallpaper_set); 
    return wallpaperViewHolder; 
} 

private static class WallpaperViewHolder { 
    ImageView imageViewWallpaper; 
    TextView wallpaperDateForUse; 
    TextView wallpaperAuthor; 
    TextView wallpaperSite; 
    Button setWallpaperBtn; 
} 
} 

回答

2

在其他情況下,你必須改變textviews知名度其他明智的,他們不可見

if (authorName == null) { 
    wallpaperViewHolder.wallpaperAuthor.setVisibility(View.GONE); 
} else { 
    wallpaperViewHolder.wallpaperSite.setVisibility(View.VISIBLE); 
    wallpaperViewHolder.wallpaperAuthor.setText(getContext().getString(R.string.wa llpaper_author_name) + " " + authorName); 
} 

希望這會對你有所幫助

+0

初學者錯誤,我不知道該項目的可見性必須重新設置:) –