2016-12-22 3 views
0

Как использовать два различных макета в recyclerviewКак использовать различные макеты в recyclerview?

У меня есть news_layout_one, news_layout_two, но я не знаю, чтобы использовать два макета, пожалуйста, помогите мне в этом коде ... спасибо

общественных класс CardAdapter расширяет RecyclerView.Adapter {

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

    } 
} 

}

+0

см. 'RecyclerView.Adapter # getItemViewType' – pskink

+0

Вы можете вставить полный код PLS. –

+1

полный код? и что ты собираешься делать? – pskink

ответ

1

Вы должны переопределить getItemViewType(int position) следующим образом:

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

Тогда вы должны сделать ту же логику в onBindViewHolder, чем в onCreateViewHolder через holder.getItemViewType()

1

Вы должны создать другой класс 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 (в данном случае OneViewHolders, TwoViewHolders, ThreeViewHolders) и определить свои взгляды там.

Смежные вопросы