三个不同设计的CardView只能用一个RecyclerView吗?
Can I Use Only One RecyclerView For The Three Different CardView With Different Design?
我可以只创建一个 recycler_view.xml
来处理我的三组不同设计的 cardview.xml
吗? 或者我需要创建单独的 recyclerView
我的每一个 cardViews
。
例如,News, Activities and Groups
有不同的 CardView
。
是的,你可以使用 getItemViewType()
根据视图类型为项目展开不同的布局
Example
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
class ViewHolder0 extends RecyclerView.ViewHolder {
...
}
class ViewHolder2 extends RecyclerView.ViewHolder {
...
}
@Override
public int getItemViewType(int position) {
return viewType;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 2: return new ViewHolder2(...);
...
}
}
}
是的,我们可以使用多个 cardView。
参考见下文link
Sample Adapter
这里我显示评论列表,当没有评论时我显示没有可用的评论。在这里,我正在创建 2 个 ViewHolders,一个用于我的评论项目,另一个用于没有评论可用的项目。
代码:
package com.subbu.moviemasti.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.subbu.moviemasti.R;
import com.subbu.moviemasti.entities.Review;
import com.subbu.moviemasti.fragment.IReviewView;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by subrahmanyam on 24-12-2015.
*/
public class ReviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<Review> results;
public ReviewAdapter(IReviewView reviewFragment, List<Review> results) {
this.results = results;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = null;
RecyclerView.ViewHolder viewHolder = null;
switch (viewType) {
case 0:
view = View.inflate(parent.getContext(), R.layout.list_item_empty_view, null);
viewHolder = new EmptyViewHolder(view);
break;
case 1:
view = View.inflate(parent.getContext(), R.layout.review_list_item, null);
viewHolder = new ViewHolder(view);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case 0:
EmptyViewHolder emptyViewHolder = (EmptyViewHolder) holder;
emptyViewHolder.emptyView.setText(((EmptyViewHolder) holder).emptyView.getResources().getString(R.string.no_trailers));
break;
case 1:
Review review = results.get(position);
ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.userName.setText(review.getAuthor());
viewHolder.review.setText(review.getContent());
break;
}
}
@Override
public int getItemCount() {
return results.size() > 0 ? results.size() : 1;
}
@Override
public int getItemViewType(int position) {
return results.size() == 0 ? 0 : 1;
}
class ViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.review_user)
TextView userName;
@Bind(R.id.review_review)
TextView review;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
我可以只创建一个 recycler_view.xml
来处理我的三组不同设计的 cardview.xml
吗? 或者我需要创建单独的 recyclerView
我的每一个 cardViews
。
例如,News, Activities and Groups
有不同的 CardView
。
是的,你可以使用 getItemViewType()
根据视图类型为项目展开不同的布局
Example
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
class ViewHolder0 extends RecyclerView.ViewHolder {
...
}
class ViewHolder2 extends RecyclerView.ViewHolder {
...
}
@Override
public int getItemViewType(int position) {
return viewType;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0: return new ViewHolder0(...);
case 2: return new ViewHolder2(...);
...
}
}
}
是的,我们可以使用多个 cardView。 参考见下文link Sample Adapter
这里我显示评论列表,当没有评论时我显示没有可用的评论。在这里,我正在创建 2 个 ViewHolders,一个用于我的评论项目,另一个用于没有评论可用的项目。
代码:
package com.subbu.moviemasti.adapter;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.subbu.moviemasti.R;
import com.subbu.moviemasti.entities.Review;
import com.subbu.moviemasti.fragment.IReviewView;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by subrahmanyam on 24-12-2015.
*/
public class ReviewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final List<Review> results;
public ReviewAdapter(IReviewView reviewFragment, List<Review> results) {
this.results = results;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = null;
RecyclerView.ViewHolder viewHolder = null;
switch (viewType) {
case 0:
view = View.inflate(parent.getContext(), R.layout.list_item_empty_view, null);
viewHolder = new EmptyViewHolder(view);
break;
case 1:
view = View.inflate(parent.getContext(), R.layout.review_list_item, null);
viewHolder = new ViewHolder(view);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
int viewType = getItemViewType(position);
switch (viewType) {
case 0:
EmptyViewHolder emptyViewHolder = (EmptyViewHolder) holder;
emptyViewHolder.emptyView.setText(((EmptyViewHolder) holder).emptyView.getResources().getString(R.string.no_trailers));
break;
case 1:
Review review = results.get(position);
ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.userName.setText(review.getAuthor());
viewHolder.review.setText(review.getContent());
break;
}
}
@Override
public int getItemCount() {
return results.size() > 0 ? results.size() : 1;
}
@Override
public int getItemViewType(int position) {
return results.size() == 0 ? 0 : 1;
}
class ViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.review_user)
TextView userName;
@Bind(R.id.review_review)
TextView review;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}