Как использовать два View один за другим для RecyclerView. Вот код, который я использую:
Код адаптера для извлечения макета:
public tagsfeatures onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_item_layout,parent,false);
return new my_item_layout(view);
}
XML Для просмотра:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:background="@drawable/noti_bg_item"
>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/tag_features_img"
android:layout_margin="10dp"
></ImageView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/tag_features_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto"
android:text="Awesome Title"
android:textSize="17sp"
android:layout_marginTop="10dp"
app:fontFamily="@font/roboto"></TextView>
<TextView
android:id="@+id/tag_features_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto"
android:layout_marginTop="10dp"
android:text="I'm the description text here"
android:textSize="12sp"
app:fontFamily="@font/roboto"></TextView>
</LinearLayout>
</LinearLayout>
Макет Успешно показывает и элементы показывают в представлении переработчика. Теперь мне нужно по-разному отображать элементы.
Скажем так:
//recyclerview
Item0// Image here, Title, Description //Item0
Item1// Title, Description, Image //Item1
Item2// Image here, Title, Description //Item2
Item3// Title, Description, Image //Item3
//recycler view
Я могу создать два макета для элементов представления переработчика, чтобы по-разному отображать содержимое. Но в настоящее время я не могу использовать один макет один за другим для l oop Элементов.
Обновление: я использовал следующий код, но он возвращает только 2-й макет:
@Override
public int getItemViewType(int position) {
final int dataObj = '0';
if(dataObj == 0 ){
return 0;
}
else{
return 1;
}
}
@Override
public tagsfeatures onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.1stlayout, parent, false);
return new tagsfeatures(view);
}
else{
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.2ndlayout, parent, false);
return new tagsfeatures(view);
}
}
Весь адаптер:
package com.example.videoseo.adapters;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.videoseo.R;
import com.example.videoseo.activities.MainActivity;
import com.example.videoseo.activities.theact;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class TagFeaturesAdapter extends RecyclerView.Adapter<TagFeaturesAdapter.tagsfeatures> {
List<Integer> imageList = new ArrayList<>();
List<String> titleList = new ArrayList<String>();
List<String> desList = new ArrayList<String>();
public TagFeaturesAdapter(List<Integer> imageList, List<String> titleList, List<String> desList) {
this.imageList = imageList;
this.titleList = titleList;
this.desList = desList;
}
@NonNull
@Override
public int getItemViewType(int position) {
int thepos = imageList.get(position);
switch (thepos){
case 0:
return 0;
default:
return 1;
}
}
@Override
public tagsfeatures onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
int postype = viewType;
switch (postype) {
case 0:
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tag_features, parent, false);
return new tagsfeatures(view);
case 1:
View view2 = LayoutInflater.from(parent.getContext()).inflate(R.layout.tag_features0, parent, false);
return new tagsfeatures(view2);
default:
View view3 = LayoutInflater.from(parent.getContext()).inflate(R.layout.tag_features, parent, false);
return new tagsfeatures(view3);
}
}
@Override
public void onBindViewHolder(@NonNull tagsfeatures holder, final int position) {
holder.toolimg.setImageResource(imageList.get(position));
holder.title.setText(titleList.get(position));
holder.description.setText(desList.get(position));
}
@Override
public int getItemCount() {
return imageList.size();
}
public class tagsfeatures extends RecyclerView.ViewHolder{
ImageView toolimg;
TextView title, description;
public tagsfeatures(@NonNull View itemView) {
super(itemView);
toolimg = (ImageView) itemView.findViewById(R.id.tag_features_img);
title = (TextView) itemView.findViewById(R.id.tag_features_title);
description = (TextView) itemView.findViewById(R.id.tag_features_desc);
}
}
}