Android 如何在recyclerview中使用不同的布局?
如何在recyclerview中使用两种不同的布局 我有新闻版面(一,新闻版面(二),但我不知道如何使用两个版面请帮我写这段代码。。。谢谢 公共类CardAdapter扩展了RecyclerView.Adapter{Android 如何在recyclerview中使用不同的布局?,android,android-recyclerview,Android,Android Recyclerview,如何在recyclerview中使用两种不同的布局 我有新闻版面(一,新闻版面(二),但我不知道如何使用两个版面请帮我写这段代码。。。谢谢 公共类CardAdapter扩展了RecyclerView.Adapter{ //Imageloader to load image private ImageLoader imageLoader; private Context context; private Activity activity; private LayoutInflater infla
//Imageloader to load image
private ImageLoader imageLoader;
private Context context;
private Activity activity;
private LayoutInflater inflater;
private static String Title="title";
private static String Genre="genre";
private static String Rating="rating";
//List to store all superheroes
List<SuperHero> superHeroes;
//Constructor of this class
public CardAdapter(List<SuperHero> superHeroes, Context context){
super();
//Getting all superheroes
this.superHeroes = superHeroes;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_layout_one, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
//Getting the particular item from the list
final SuperHero superHero = superHeroes.get(position);
//Loading image from url
imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
imageLoader.get(superHero.getThumbnailUrl(), ImageLoader.getImageListener(holder.imageView, R.drawable.au_small_logo, android.R.drawable.ic_dialog_alert));
//Showing data on the views
holder.imageView.setImageUrl(superHero.getThumbnailUrl(), imageLoader);
holder.textViewName.setText(superHero.getTitle());
holder.textViewPublisher.setText(superHero.getRating());
holder.secid.setText(superHero.getSec_id());
holder.category.setText(superHero.getCategory());
holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), News_Detail.class);
intent.putExtra("images", superHero.getThumbnailUrl());
intent.putExtra(Title, superHero.getTitle());
intent.putExtra(Genre, superHero.getGenre());
intent.putExtra(Rating, superHero.getRating());
v.getContext().startActivity(intent);
}
});
holder.share.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick( View view)
{
Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "\n" + "\n" + "http://abc.news/News/"+holder.secid.getText().toString()+"/"+holder.category.getText().toString());
view.getContext().startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return superHeroes.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
//Views
public NetworkImageView imageView;
public TextView textViewName;
public TextView textViewPublisher;
public TextView secid;
public TextView category;
public RelativeLayout relativeLayout;
public ImageView share;
//Initializing Views
public ViewHolder(View itemView) {
super(itemView);
imageView = (NetworkImageView) itemView.findViewById(R.id.thumbnail);
textViewName = (TextView) itemView.findViewById(R.id.title);
textViewPublisher = (TextView) itemView.findViewById(R.id.rating);
secid = (TextView) itemView.findViewById(R.id.sec_id);
category = (TextView) itemView.findViewById(R.id.category);
relativeLayout = (RelativeLayout) itemView.findViewById(R.id.relat);
share = (ImageView) itemView.findViewById(R.id.share);
}
}
//要加载图像的Imageloader
私有图像加载器;
私人语境;
私人活动;
私人充气机;
私有静态字符串Title=“Title”;
私有静态字符串Genre=“Genre”;
私有静态字符串Rating=“Rating”;
//存储所有超级英雄的列表
列出超级英雄;
//这个类的构造函数
公共卡适配器(列出超级英雄、上下文){
超级();
//获得所有超级英雄
这个。超级英雄=超级英雄;
this.context=上下文;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.news\u layout\u one,parent,false);
视窗夹持器视窗夹持器=新视窗夹持器(v);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(最终ViewHolder,内部位置){
//从列表中获取特定项
最终超级英雄超级英雄=超级英雄。获取(位置);
//从url加载图像
imageLoader=CustomVolleyRequest.getInstance(上下文).getImageLoader();
imageLoader.get(superHero.getThumbnailUrl(),imageLoader.getImageListener(holder.imageView,R.dravable.au_small_徽标,android.R.dravable.ic_对话框_警报));
//显示视图上的数据
holder.imageView.setImageUrl(superHero.getThumbnailUrl(),imageLoader);
holder.textViewName.setText(superHero.getTitle());
holder.textViewPublisher.setText(superHero.getRating());
holder.secid.setText(superHero.getSec_id());
holder.category.setText(superHero.getCategory());
holder.relativeLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent Intent=newintent(v.getContext(),News_Detail.class);
intent.putExtra(“images”,superHero.getThumbnailUrl());
intent.putExtra(Title,superHero.getTitle());
intent.putExtra(流派,superHero.getGenre());
intent.putExtra(Rating,superHero.getRating());
v、 getContext().startActivity(意图);
}
});
holder.share.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图)
{
意图=新意图(android.content.Intent.ACTION\u SEND);
intent.setType(“文本/普通”);
intent.putExtra(intent.EXTRA_文本,“\n”+“\n”+”http://abc.news/News/“+holder.secid.getText().toString()+”/“+holder.category.getText().toString());
view.getContext().startActivity(intent);
}
});
}
@凌驾
public int getItemCount(){
返回超级英雄。大小();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
//观点
公共网络图像视图;
公共文本视图文本视图名称;
公共文本视图文本视图发布者;
公共文本视图secid;
公共文本视图类别;
公共关系;
公共图像共享;
//初始化视图
公共视图持有者(视图项视图){
超级(项目视图);
imageView=(NetworkImageView)itemView.findViewById(R.id.缩略图);
textViewName=(TextView)itemView.findViewById(R.id.title);
textViewPublisher=(TextView)itemView.findViewById(R.id.rating);
secid=(TextView)itemView.findViewById(R.id.sec_id);
category=(TextView)itemView.findViewById(R.id.category);
relativeLayout=(relativeLayout)itemView.findViewById(R.id.relat);
share=(ImageView)itemviewbyd(R.id.share);
}
}
}您需要覆盖
getItemViewType(int位置)
,如下所示:
class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
private static final int VIEW_TYPE_ONE = 1;
private static final int VIEW_TYPE_TWO = 2;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_ONE) {
// inflate first view type
} else {
// inflate second view type
}
}
@Override
public int getItemViewType(int position) {
// return your ViewType depending on position here
}
}
class CardAdapter扩展了RecyclerView.Adapter{
私有静态最终int视图类型=1;
私有静态最终int视图类型=2;
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
如果(视图类型==视图类型){
//充气第一视图类型
}否则{
//充气第二视图类型
}
}
@凌驾
public int getItemViewType(int位置){
//根据此处的位置返回视图类型
}
}
然后,您必须通过
holder.getItemViewType()
在onBindViewHolder
中执行与在onCreateViewHolder
中相同的逻辑,您必须为不同的布局创建不同的viewHolder类,并在onCreateViewHolder中附加不同的视图。以下是一个例子:
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
RecyclerView.ViewHolder viewHolder;
switch (viewType) {
case TYPE_ONE: {
view = getLayoutView(parent, R.layout.list_one);
viewHolder = new OneViewHolders(view, currActivity);
break;
}
case TYPE_TWO: {
view = getLayoutView(parent, R.layout.list_two);
viewHolder = new TwoViewHolders(view, currActivity, getItem(viewType));
break;
}
case TYPE_THREE: {
view = getLayoutView(parent, R.layout.list_three);
viewHolder = new ThreeViewHolders(view, currActivity, getItem(viewType));
break;
}
default: {
viewHolder = null;
}
}
return viewHolder;
}
然后创建三个不同的viewHolder类(在本例中为一个viewHolder、两个viewHolder、三个viewHolder)并在其中定义视图。请参见
RecyclerView.Adapter#getItemViewType
您能粘贴完整的代码吗请填写完整的代码?那你打算怎么办?