Android RecyclerView水平滚动数据随机更改

Android RecyclerView水平滚动数据随机更改,android,android-recyclerview,Android,Android Recyclerview,我在水平recyclerview适配器中遇到问题。我的适配器在帖子0中包含imageview,而remainings帖子为空。 当我从左向右滚动时,我的图像将从位置1重新显示到位置4和位置7。如果我继续从左向右滚动,我的图像视图将显示在所有位置。这里是我的适配器类。我已将此水平Recyclerview适配器放置在垂直Recyclerview适配器中 HomeBannerAdapter.Java 公共类HomeBannerAdapter扩展了RecyclerView.Adapter{ privat

我在水平recyclerview适配器中遇到问题。我的适配器在帖子0中包含imageview,而remainings帖子为空。 当我从左向右滚动时,我的图像将从位置1重新显示到位置4和位置7。如果我继续从左向右滚动,我的图像视图将显示在所有位置。这里是我的适配器类。我已将此水平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();

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

    }

}
私有列表mHomepageList;
私有上下文;
公共HomeBannerAdapter(上下文上下文,列表mHomepageList){
this.mHomepageList=mHomepageList;
this.mContext=上下文;
}
@凌驾
public SingleItemRowHolder onCreateViewHolder(视图组视图组,int位置){
视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.list_single_card,viewGroup,false);
SingleItemRowHolder mh=新的SingleItemRowHolder(v);
返回mh;
}
@凌驾
public void onBindViewHolder(最终SingleItemRowHolder,最终int位置){
final HomePageList singleItem=mHomepageList.get(位置);
holder.mTitle.setText(singleItem.getTitle());
如果(!singleItem.getBannerUrl().isEmpty()){
Glide.with(mContext).load(singleItem.getBannerUrl().get(0)).placeholder(R.drawable.placeholder).dontAnimate().into(holder.itemImage);
Log.e(“Homebanner不为空”,“url”+singleItem.getBannerUrl().toString()+“position”+position”);
}否则{
Log.e(“Homebanner url为空”,“url”+singleItem.getBannerUrl().toString()+“position”+position”);
}
}
@凌驾
public int getItemCount(){
返回值(null!=mHomepageList?mHomepageList.size():0);
}
公共类SingleItemRowHolder扩展了RecyclerView.ViewHolder{
公共图像查看项目图像;
//int position=getAdapterPosition();
公共文本视图mTitle;
公共主页列表mHomePageList;
公共单项目行持有者(视图){
超级(视图);
this.itemImage=(ImageView)view.findViewById(R.id.itemImage);
this.mTitle=(TextView)view.findviewbyd(R.id.tvTitle);
//mHomePageList=albumList.get(getPosition());
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(v.getContext(),mTitle.getText().toString()+“位置”+getPosition()+“getAdapterPosition”+getAdapterPosition(),Toast.LENGTH_SHORT).show();
}
});
}
}
}

这是我的垂直回收视图适配器

Java

公共类HomeDataAdapter扩展了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();

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

    }

}
私有列表formList;
私有上下文;
私人列表主页列表;
私有列表资源列表;
最终int视图类型主页=0;
最终int视图\类型\格式页=1;
最终int视图类型资源页面=2;
公共HomeDataAdapter(上下文上下文,列表homePageList){
this.homePageList=主页列表;
this.mContext=上下文;
}
公共HomeDataAdapter(上下文上下文、列表homePageList、列表formList){
this.formList=formList;
this.homePageList=主页列表;
this.mContext=上下文;
}
公共HomeDataAdapter(上下文上下文、列表homePageList、列表formList、列表resourceList){
this.resourceList=resourceList;
this.formList=formList;
this.homePageList=主页列表;
this.mContext=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组视图组,int位置){
开关(位置){
案例视图\类型\主页:
视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.list_项,空);
ViewHolder homeView=新的ViewHolder(v);
返回homeView;
案例视图\类型\表单页面:
视图v1=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.list_项,null);
ViewHolder formView=新的ViewHolder(v1);
返回表单视图;
案例视图\类型\资源页面:
视图v2=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.list_项,空);
ViewHolder resourceView=新的ViewHolder(v2);
返回资源视图;
}
返回null;
}
@凌驾
public void onBindViewHolder(最终ViewHolder项RowHolder,int位置){
如果(位置==查看\类型\主页){
主页mHomePage=主页列表.get(位置);
Log.e(“albumList”、“albumList”+homePageList.get(position).toString()+“position”+position);
itemRowHolder.itemTitle.setText(mHomePage.getHeaderTitle());
HomeBannerAdapter itemListDataAdapter=新的HomeBannerAdapter(mContext,mHomePage.getResults());
itemRowHolder.mRecyclerview.setHasFixedSize(true);
itemrrowholder.mRecyclerview.setLayoutManager(新的LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false));
itemRowHolder.mRecyclerview.getLayoutManager().scrollToPosition(位置);
itemRowHolder.mRecyclerview.getHorizontalOffset();
//itemRowHolder.mRecyclerview.scrollToPositionWithOffset(2,20);
//itemRowHolder.mRecyclerview.getLayoutManager().smoothScrollToPosition(itemRowHolder.mRecyclerview,null,recyclerAdapter.getItemCount()-1);
itemRowHolder.mRecyclerview.setAdapter(itemListDataAdapter);
}else if(位置==视图\类型\表单页){
位置=位置-1;
FormList mFormPage=FormList.get(位置);
itemRowHolder.itemTitle.setText(formList.get(position.getHeaderTitle());
JobBannerAdapter itemListDataAdapter=新的JobBannerAdapter(mContext,mFormPage.getResults());
itemRowHolder.mRecyclerview.setHasFixedSize(true);
itemrrowholder.mRecyclerview.setLayoutManager(新的LinearLayoutManager(mContext,LinearLayoutManager.HORIZONTAL,false));
itemRowHolder.mRecyclerview.setAdapter(itemListDataAdapter);
}else if(位置==视图)