2017-03-25 1 views
0

가로 리사이클 러 어댑터에서 문제가 있습니다. 어댑터에 0 위치의 이미지 뷰가 포함되어 있으며 나머지는 비어 있습니다. 왼쪽에서 오른쪽으로 스크롤하면 내 이미지가 1에서 4 및 7 위치로 다시 나타납니다. 왼쪽에서 오른쪽으로 스크롤을 계속하면 내 이미지 뷰가 모든 위치에 표시됩니다. 여기 어댑터 클래스가 있습니다.이 가로 Recyclerview 어댑터를 세로 Recyclerview 어댑터.RecyclerView Horizontal Scroll 데이터가 임의로 변경됩니다.

HomeBannerAdapter.Java

공용 클래스 HomeBannerAdapter이 RecyclerView.Adapter를 확장 {

private List<HomePageList> mHomepageList; 
private Context mContext; 


public HomeBannerAdapter(Context context, List<HomePageList> mHomepageList) { 
    this.mHomepageList = mHomepageList; 
    this.mContext = context; 
} 

@Override 
public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int position) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, viewGroup, false); 
    SingleItemRowHolder mh = new SingleItemRowHolder(v); 
    return mh; 
} 

@Override 
public void onBindViewHolder(final SingleItemRowHolder holder, final int position) { 
    final HomePageList singleItem = mHomepageList.get(position); 
    holder.mTitle.setText(singleItem.getTitle()); 
    if (!singleItem.getBannerUrl().isEmpty()) { 
     Glide.with(mContext).load(singleItem.getBannerUrl().get(0)).placeholder(R.drawable.placeholder).dontAnimate().into(holder.itemImage); 
     Log.e("Homebanner not empty", "url" + singleItem.getBannerUrl().toString() + "position" + position); 

    } else { 
     Log.e("Homebanner url empty", "url" + singleItem.getBannerUrl().toString() + "position" + position); 
    } 

} 

@Override 
public int getItemCount() { 
    return (null != mHomepageList ? mHomepageList.size() : 0); 
} 

public class SingleItemRowHolder extends RecyclerView.ViewHolder { 

    public ImageView itemImage; 
    //int position = getAdapterPosition(); 
    public TextView mTitle; 
    public HomePageList mHomePageList; 

    public SingleItemRowHolder(View view) { 
     super(view); 
     this.itemImage = (ImageView) view.findViewById(R.id.itemImage); 

     this.mTitle = (TextView) view.findViewById(R.id.tvTitle); 
     // mHomePageList = albumList.get(getPosition()); 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Toast.makeText(v.getContext(), mTitle.getText().toString() + " position " + getPosition() + "getAdapterPosition" + getAdapterPosition(), Toast.LENGTH_SHORT).show(); 

      } 
     }); 
    } 
} 

은}

여기

내 수직 Recyclerview 어댑터

HomeDataAdapter.Java

공용 클래스입니다 HomeDataAdapt 어은 RecyclerView.Adapter {

private List<FormList> formList; 
private Context mContext; 
private List<HomePage> homePageList; 
private List<ResourceType> resourceList; 
final int VIEW_TYPE_HOMEPAGE = 0; 
final int VIEW_TYPE_FORMPAGE = 1; 
final int VIEW_TYPE_RESOURCEPAGE = 2; 

public HomeDataAdapter(Context context, List<HomePage> homePageList) { 
    this.homePageList = homePageList; 
    this.mContext = context; 
} 

public HomeDataAdapter(Context context, List<HomePage> homePageList, List<FormList> formList) { 
    this.formList = formList; 
    this.homePageList = homePageList; 
    this.mContext = context; 
} 

public HomeDataAdapter(Context context, List<HomePage> homePageList, List<FormList> formList, List<ResourceType> resourceList) { 
    this.resourceList = resourceList; 
    this.formList = formList; 
    this.homePageList = homePageList; 
    this.mContext = context; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { 

    switch (position) { 
     case VIEW_TYPE_HOMEPAGE: 
      View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null); 
      ViewHolder homeView = new ViewHolder(v); 
      return homeView; 
     case VIEW_TYPE_FORMPAGE: 
      View v1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null); 
      ViewHolder formView = new ViewHolder(v1); 
      return formView; 
     case VIEW_TYPE_RESOURCEPAGE: 
      View v2 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null); 
      ViewHolder resourceView = new ViewHolder(v2); 
      return resourceView; 
    } 
    return null; 
} 

@Override 
public void onBindViewHolder(final ViewHolder itemRowHolder, int position) { 


    if (position == VIEW_TYPE_HOMEPAGE) { 
     HomePage mHomePage = homePageList.get(position); 
     Log.e("albumList", "albumList" + homePageList.get(position).toString() + "position" + position); 
     itemRowHolder.itemTitle.setText(mHomePage.getHeaderTitle()); 
     HomeBannerAdapter itemListDataAdapter = new HomeBannerAdapter(mContext, mHomePage.getResults()); 
     itemRowHolder.mRecyclerview.setHasFixedSize(true); 
     itemRowHolder.mRecyclerview.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); 
     itemRowHolder.mRecyclerview.getLayoutManager().scrollToPosition(position); 
     itemRowHolder.mRecyclerview.getHorizontalOffset(); 
     //itemRowHolder.mRecyclerview.scrollToPositionWithOffset(2, 20); 
     // itemRowHolder.mRecyclerview.getLayoutManager().smoothScrollToPosition(itemRowHolder.mRecyclerview, null, recyclerAdapter.getItemCount() - 1); 
     itemRowHolder.mRecyclerview.setAdapter(itemListDataAdapter); 
    } else if (position == VIEW_TYPE_FORMPAGE) { 
     position = position - 1; 
     FormList mFormPage = formList.get(position); 
     itemRowHolder.itemTitle.setText(formList.get(position).getHeaderTitle()); 
     JobBannerAdapter itemListDataAdapter = new JobBannerAdapter(mContext, mFormPage.getResults()); 
     itemRowHolder.mRecyclerview.setHasFixedSize(true); 
     itemRowHolder.mRecyclerview.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); 
     itemRowHolder.mRecyclerview.setAdapter(itemListDataAdapter); 
    } else if (position == VIEW_TYPE_RESOURCEPAGE) { 
     position = position - 2; 
     ResourceType mResourceType = resourceList.get(position); 
     itemRowHolder.itemTitle.setText(mResourceType.getHeaderTitle()); 
     ResourceBannerAdapter itemListDataAdapter = new ResourceBannerAdapter(mContext, resourceList.get(position).getResults()); 
     itemRowHolder.mRecyclerview.setHasFixedSize(true); 
     itemRowHolder.mRecyclerview.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); 
     itemRowHolder.mRecyclerview.setAdapter(itemListDataAdapter); 
    } 
} 

@Override 
public int getItemCount() { 
    int homePageListSize = 0; 
    int formPageListSize = 0; 
    int resourcePageListSize = 0; 
    if (homePageList == null && formList == null && resourceList == null) return 0; 

    if (resourceList != null) 
     resourcePageListSize = resourceList.size(); 
    if (formList != null) 
     formPageListSize = formList.size(); 
    if (homePageList != null) 
     homePageListSize = homePageList.size(); 

    if (resourcePageListSize > 0 && formPageListSize > 0 && homePageListSize > 0) 
     return homePageListSize + formPageListSize + resourcePageListSize; // albumlist+formlist+resourceList 

    if (formPageListSize > 0 && homePageListSize > 0) 
     return homePageListSize + formPageListSize; // albumlist+formlist 
    else if (resourcePageListSize > 0 && homePageListSize == 0 && formPageListSize == 0) 
     return resourcePageListSize;       // resourceList 
    else if (formPageListSize > 0 && homePageListSize == 0) 
     return formPageListSize;      // formlist 
    else if (formPageListSize == 0 && homePageListSize > 0) 
     return homePageListSize;       // albumlist 
    else return 0; 
    // return (null != albumList ? albumList.size()+mFormList.size() : 0); 
} 

@Override 
public int getItemViewType(int position) { 
    int homePageListSize = 0; 
    int formPageListSize = 0; 
    int resourcePageListSize = 0; 


    if (homePageList == null && formList == null && resourceList == null) 
     return super.getItemViewType(position); 
    if (homePageList != null) 
     homePageListSize = homePageList.size(); 
    if (formList != null) 
     formPageListSize = formList.size(); 
    if (resourceList != null) 
     resourcePageListSize = resourceList.size(); 
    if (formPageListSize > 0 && homePageListSize > 0) { 
     if (position == 0) return VIEW_TYPE_HOMEPAGE; 
     else if (position == formPageListSize) 
      return VIEW_TYPE_FORMPAGE; 
    } else if (formPageListSize == 0 && homePageListSize > 0) { 
     if (position == 0) return VIEW_TYPE_HOMEPAGE; 
     else return VIEW_TYPE_FORMPAGE; 
    } else if (resourcePageListSize > 0 && formPageListSize > 0 && homePageListSize > 0) { 
     if (position == 0) return VIEW_TYPE_HOMEPAGE; 
     else if (position == 1) 
      return VIEW_TYPE_FORMPAGE; 
     else if (position == 2) 
      return VIEW_TYPE_RESOURCEPAGE; 
    } 
    return super.getItemViewType(position); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 

    public TextView itemTitle; 
    public CustomRecyclerView mRecyclerview; 

    public ViewHolder(View view) { 
     super(view); 

     this.itemTitle = (TextView) view.findViewById(R.id.itemTitle); 
     this.mRecyclerview = (CustomRecyclerView) view.findViewById(R.id.recycler_view_list); 

    } 

} 

}

답변

0

나는 당신의 항목 bannerUrls의 일부를 빈 생각을 확장합니다. 따라서 비어있는 경우 Glide 또는 수동으로 기본 빈 이미지를 설정하지 마십시오. 여기 당신의 코드를 조금 수정했습니다. 나는 이것이 도움이 될 것이라고 생각한다.

@Override 
public void onBindViewHolder(final SingleItemRowHolder holder, final int position) { 
    final HomePageList singleItem = mHomepageList.get(position); 
    holder.mTitle.setText(singleItem.getTitle()); 
    if (!TextUtils.isEmpty(singleItem.getBannerUrl())) { 
     Glide.with(mContext).load(singleItem.getBannerUrl().get(0)).placeholder(R.drawable.placeholder).dontAnimate().into(holder.itemImage); 
     Log.e("Homebanner not empty", "url" + singleItem.getBannerUrl().toString() + "position" + position); 

    } else { 
     holder.itemImage.setImageResource(R.drawable.your_place_holder_for_empty_url); 
    } 

} 

참고 :은 또한 그것은 Null Pointer Exception을 피하기 위해 TextUtils.isEmpty(string)에 대신 string.isEmpty()으로 사용하는 것이 더 나은 선택입니다.

편집 :

또한 당신이 Glideif 문을 제거하여 ImageView에 자리를 넣어하도록 할 수 있습니다.

if (!TextUtils.isEmpty(singleItem.getBannerUrl())) 

이 해결책이 도움이 될 것입니다. 이 방법을 선택하는 경우 을 잊어 버리면 빈 이미지 또는 null url에 대해 빈 이미지를 Glide으로 설정하십시오.

+0

고마워요. 시도해보고 작동하는지 알려 드리겠습니다. :) – pradeep

+0

Thankss Savepopulation.Glide가 빈 Images.I에 대한 자리 표시자를 지정하지 않는 것 같습니다. 빈 문자열에 대한 자리 표시자를 수동으로 구현했습니다. holder.itemImage.setImageResource (R.drawable.your_place_holder_for_empty_url); – pradeep

+0

아니요. 내 대답을 편집 할게. – savepopulation

관련 문제