2017-03-25 6 views
0

水平リサイクラビューアアダプターの問題に直面しています。私のアダプターには、姿勢0の画像ビューが含まれており、残りの画像は空です。 左から右にスクロールすると、画像が1から4と7の位置に表示されます。左から右にスクロールすると、画像の表示がすべての場所に表示されます。アダプタクラスです。このRecyclerviewアダプタは、垂直Recyclerviewアダプタ。RecyclerView水平スクロールデータがランダムに変更される

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(); 

      } 
     }); 
    } 
} 

}

HomeDataAdapter.Java

パブリッククラス私の縦長Recyclerviewアダプタ

あるを拡張しますHomeDataAdaptえー、私はあなたのアイテムbannerUrlsの一部が空だと思う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

を拡張します。空であれば、デフォルトの空のイメージを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()に代わりのを使用するためのより良い選択です。

編集:

また、あなたはif文を削除してImageViewにプレースホルダを置くためにGlideをさせることができます。

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

私はこの解決策もあなたのために働くと思います。この方法を選択した場合は、を忘れずに空の画像をGlideに設定してください。

+0

ありがとうございます。私はそれを試して、それが動作していることをお知らせします。:) – pradeep

+0

ありがとうSavepopulation.Glideは空のImages.Iのプレースホルダを割り当てていないようです空の文字列のプレースホルダを手動で実装しました。プロパティ。 – pradeep

+0

はありません。私は私の答えを編集します。 – savepopulation

関連する問題