Используйте два макета элементов списка просмотра Recycler по одному - PullRequest
0 голосов
/ 24 апреля 2020

Как использовать два 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);

        }
    }
}

1 Ответ

0 голосов
/ 24 апреля 2020

в вашем адаптере перезаписи переопределить функцию getItemViewType

override fun getItemViewType(position: Int): Int {
            return when(dataList.get(position).type) {
                "typeOne" -> 0;
                "typeTwo" -> 1;
                else -> 2
            }
        }

тип, возвращаемый из этой функции, будет передан в функцию onCreateViewHolder. На основе viewType вы можете загружать различные файлы макетов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...