【发布时间】:2018-07-31 10:38:09
【问题描述】:
我有多个布局将在我的RecyclerView ViewHolder 中膨胀,视图根据传递给 ViewHolder 的数据集而膨胀,我知道如何使用 getItemViewType() 但在我的情况下它不适用,因此例如数据集包含 1,2,3 它会将所有视图膨胀到 ViewHolder 容器(LinearLayout)。
我的带有 LinearLayout 容器的 ViewHolder:
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardBackgroundColor="@android:color/white"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/layout_header" />
<LinearLayout
android:id="@+id/lnr_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
<include layout="@layout/layout_footer" />
</LinearLayout>
</android.support.v7.widget.CardView>
ViewHolder1:
在这里,我使用变量创建了视图的引用,如果视图被回收,我将检查变量是否不为空,例如 recyclerView,我将重置数据。
private class ViewHolder1 extends RecyclerView.ViewHolder{
@BindView(R.id.lnr_container)
LinearLayout mLnrContainer;
private RecyclerView mRecyclerView;
private ImageView mImageView;
private LinearLayout mLayout;
public ViewHolder1(View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
}
public void setData(JSONObject data){
mLnrContainer.removeAllViews();
if (data.has("1")){
if (mRecyclerView == null){
mRecyclerView = new RecyclerView(itemView.getContext());
// other implementation
mRecyclerView.setAdapter(new SomeAdapter(itemView.getContext(),data));
}else {
mRecyclerView.getAdapter().setData(data);
}
addView(mRecyclerView);
}
if (data.has("2")){
mImageView = new ImageView(itemView.getContext());
addView(mImageView);
}
if (data.has("3")){
mLayout = LayoutInflater.from(itemView.getContext()).inflate(R.layout.custom_layout,mLnrContainer,false);
addView(mLayout);
}
}
private void addView(View view){
mLnrContainer.addView(view);
}
}
ViewHolder2:
private class ViewHolder2 extends RecyclerView.ViewHolder{
@BindView(R.id.lnr_container)
LinearLayout mLnrContainer;
public ViewHolder2(View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
}
public void setData(JSONObject data){
mLnrContainer.removeAllViews();
if (data.has("1")){
RecyclerView mRecyclerView = new RecyclerView(itemView.getContext(),data);
addView(mRecyclerView);
}
if (data.has("2")){
ImageView mImageView = new ImageView(itemView.getContext());
addView(mImageView);
}
if (data.has("3")){
LinearLayout mLayout = LayoutInflater.from(itemView.getContext()).inflate(R.layout.custom_layout,mLnrContainer,false);
addView(mLayout);
}
}
private void addView(View view){
mLnrContainer.addView(view);
}
}
我想知道和困惑应该在我的代码中实现哪个 ViewHolder,如果 ViewHolder 被回收,是否存在可能影响的差异?感谢您的回答和建议。
【问题讨论】:
标签: android view android-recyclerview android-viewholder