2015-06-03 23 views
0

内RecyclerView.Adapter改变主视图的参考,我们可以改变我们把viewholder从onCreateViewHolder方法类似RecyclerView.Adapter在onBindViewHolder

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false); 
     ViewHolder vh = new ViewHolder(mView); 
     return vh; 
    } 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { 
    if(viewHolder instanceof ViewHolder) { 
     View view = new View(mContext); 
     view.setBackGroundColor(color); 
     ViewHolder mViewHolder = (ViewHolder)viewHolder; 
     mViewHolder.mMainView = view; 
    } 
    } 
public static class ViewHolder extends RecyclerView.ViewHolder { 
    protected View insideview; 

    public ViewHolderFooter(View v) { 

     super(v); 
     insideview = v; 

    } 

} 

主视图但它不改变主视图,甚至不扔任何异常。 请帮我理解为什么它是这样的?如果我们再次滚动浏览该视图或其他内容,该视图是否保存我们的视图以供重用?

回答

1

回答你的问题:

难道viewholder拯救我们的看法重用,如果我们通过视图或别的东西再滚动?

是的,ViewHolder用于“缓存”视图类型,因此您可以在RecyclerView中重新使用和加速所有视图实例创建。

虽然在你的代码中存在一个小错误(ViewHolder命名的类中的ViewHolderFooter),但是我可以建议你阅读这些回答得很好的问题的答案 - 我认为这对你很有用。

How to create RecyclerView with multiple view type?

基本上,你需要实现getItemViewType()方法,让你使用一个以上的ViewHolder的RecyclerView内。

+0

我的主要问题是我们可以在onBinderViewHolder() –

+0

中更改主视图您不能在'onBindViewHolder()'中更改它。你必须结合使用'getItemViewType'和onBindViewHolder来实现你想要的(你必须知道视图类型的数量)。如果这种行为不符合您的需求,请尝试解释用例,以便我可以提供更好的支持 – krumikaze

相关问题