
text_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textViewText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:textAppearance="@android:style/TextAppearance.Large"
android:text="Text" />
</RelativeLayout>
image_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageViewImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
app:srcCompat="@mipmap/iran" />
</RelativeLayout>
ViewHolderText.java
public class ViewHolderText extends RecyclerView.ViewHolder {
public TextView textViewText;
public ViewHolderText(View itemView) {
super(itemView);
textViewText= (TextView) itemView.findViewById(R.id.textViewText);
}
}
ViewHolderImage.java
public class ViewHolderImage extends RecyclerView.ViewHolder{
public ImageView imageViewImage;
public ViewHolderImage(View itemView) {
super(itemView);
imageViewImage= (ImageView) itemView.findViewById(R.id.imageViewImage);
}
}
ObjectAdapter.java
public class ObjectAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int Text = 0, Image = 1;
List<Object> objectList;
public ObjectAdapter(List<Object> objectList) {
this.objectList = objectList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
RecyclerView.ViewHolder viewHolder = null;
if (viewType == Text) {
View view = inflater.inflate(R.layout.text_row, parent, false);
viewHolder = new ViewHolderText(view);
} else if (viewType == Image) {
View view = inflater.inflate(R.layout.image_row, parent, false);
viewHolder = new ViewHolderImage(view);
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder.getItemViewType()==Text)
{
ViewHolderText viewHolder= (ViewHolderText) holder;
com.example.mahmood.a087.Text obj= (com.example.mahmood.a087.Text) objectList.get(position);
viewHolder.textViewText.setText(obj.getText());
}
else if (holder.getItemViewType()==Image)
{
ViewHolderImage viewHolder= (ViewHolderImage) holder;
com.example.mahmood.a087.Image obj= (com.example.mahmood.a087.Image) objectList.get(position);
viewHolder.imageViewImage.setImageResource(obj.getImage());
}
}
@Override
public int getItemViewType(int position) {
if (objectList.get(position) instanceof Text) {
return Text;
} else if (objectList.get(position) instanceof Image) {
return Image;
}
return -1;
}
@Override
public int getItemCount() {
return objectList.size();
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
List<Object> objectList = new ArrayList<>();
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Text text1 = new Text();
text1.setText("Mahmood");
Text text2 = new Text();
text2.setText("Javad");
Text text3 = new Text();
text3.setText("Hamed");
Image image1 = new Image();
image1.setImage(R.mipmap.iran);
Image image2 = new Image();
image2.setImage(R.mipmap.canada);
objectList.add(text1);
objectList.add(image1);
objectList.add(text2);
objectList.add(text3);
objectList.add(image2);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
recyclerView.addItemDecoration(itemDecoration);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
adapter = new ObjectAdapter(objectList);
recyclerView.setAdapter(adapter);
}
}
References
https://github.com/mhdr/AndroidSamples/tree/master/087
https://guides.codepath.com/android/Heterogenous-Layouts-inside-RecyclerView