Recyrcleview dynamic android

0

I need to do a recyrcleview one within another vertically more like this as already posted elsewhere will not work. And the expandable list view in my case does not meet my need because it will have several particularities.

I started to use LayoutInflater and I was able to do that I wanted the internal dynamic plus the outside of it I can only do it manually and I needed to do it dynamically because how will it be generated with data that came from the database data I do not know if it will have 1 or a thousand headers with data inside, and in my code below it only holds for 2 and if I needed it for more I would need to do it manually. I do not know if I can be clear. Thank you in advance!

My MainActivity.

public class MainActivity extends AppCompatActivity {

private ArrayList<Resultado> lista1 = new ArrayList<Resultado>();
private ArrayList<Resultado> lista2 = new ArrayList<Resultado>();

private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private DynamicListAdapter mDynamicListAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRecyclerView = (RecyclerView) findViewById(R.id.recyrcleview);

    lista1 = Utils.preencherLista1();
    lista2 = Utils.preencherLista2();

    mDynamicListAdapter = new DynamicListAdapter();
    mLayoutManager = new LinearLayoutManager(MainActivity.this);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mDynamicListAdapter);
}

private class DynamicListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private static final int ITEM_RESULTADO_VIEW1 = 1;
    private static final int ITEM_RESULTADO_CABECALHO_VIEW1 = 2;
    private static final int ITEM_RESULTADO_VIEW2 = 3;
    private static final int ITEM_RESULTADO_CABECALHO_VIEW2 = 4;

    public DynamicListAdapter() {
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView txtDescricao;
        private TextView txtTitulo;

        public ViewHolder(final View itemView) {
            super(itemView);

            txtDescricao = (TextView) itemView.findViewById(R.id.descricao);
            txtTitulo = (TextView) itemView.findViewById(R.id.titulo);
        }

        public void bindViewSecondList(int pos) {

            if (lista1 == null) pos = pos - 1;
            else {
                if (lista1.size() == 0) pos = pos - 1;
                else pos = pos - lista1.size() - 2;
            }

            final String descricao = lista2.get(pos).getDescricao();
            final String titulo = lista2.get(pos).getTitulo();
            txtDescricao.setText(descricao);
            txtTitulo.setText(titulo);
        }

        public void bindViewFirstList(int pos) {
            pos = pos - 1;

            final String descricao = lista1.get(pos).getDescricao();
            final String titulo = lista1.get(pos).getTitulo();

            txtDescricao.setText(descricao);
            txtTitulo.setText(titulo);
        }

    }

    private class ItemCabecalhoLista1ViewHolder extends ViewHolder {
        public ItemCabecalhoLista1ViewHolder(View itemView) {
            super(itemView);
        }
    }

    private class ItemLista1ViewHolder extends ViewHolder {
        public ItemLista1ViewHolder(View itemView) {
            super(itemView);
        }
    }

    private class ItemCabecalhoLista2ViewHolder extends ViewHolder {
        public ItemCabecalhoLista2ViewHolder(View itemView) {
            super(itemView);
        }
    }

    private class ItemLista2ViewHolder extends ViewHolder {
        public ItemLista2ViewHolder(View itemView) {
            super(itemView);
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v;
        if (viewType == ITEM_RESULTADO_VIEW1) {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_resultado, parent, false);
            ItemLista1ViewHolder vh = new ItemLista1ViewHolder(v);
            return vh;

        } else if (viewType == ITEM_RESULTADO_CABECALHO_VIEW1) {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_resultado_cabecalho, parent, false);
            ItemCabecalhoLista1ViewHolder vh = new ItemCabecalhoLista1ViewHolder(v);
            return vh;

        } else if (viewType == ITEM_RESULTADO_CABECALHO_VIEW2) {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_resultado_cabecalho, parent, false);
            ItemCabecalhoLista2ViewHolder vh = new ItemCabecalhoLista2ViewHolder(v);
            return vh;

        } else {
            v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_resultado, parent, false);
            ItemLista2ViewHolder vh = new ItemLista2ViewHolder(v);
            return vh;
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

        try {
            if (holder instanceof ItemLista2ViewHolder) {
                ItemLista2ViewHolder vh = (ItemLista2ViewHolder) holder;
                vh.bindViewSecondList(position);

            } else if (holder instanceof ItemCabecalhoLista1ViewHolder) {
                ItemCabecalhoLista1ViewHolder vh = (ItemCabecalhoLista1ViewHolder) holder;

            } else if (holder instanceof ItemLista1ViewHolder) {
                ItemLista1ViewHolder vh = (ItemLista1ViewHolder) holder;
                vh.bindViewFirstList(position);

            } else if (holder instanceof ItemCabecalhoLista2ViewHolder) {
                ItemCabecalhoLista2ViewHolder vh = (ItemCabecalhoLista2ViewHolder) holder;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public int getItemCount() {

        int tamanhoLista1 = 0;
        int tamanhoLista2 = 0;

        if (lista2 == null && lista1 == null) return 0;

        if (lista2 != null)
            tamanhoLista2 = lista2.size();
        if (lista1 != null)
            tamanhoLista1 = lista1.size();

        if (tamanhoLista2 > 0 && tamanhoLista1 > 0)
            return 1 + tamanhoLista1 + 1 + tamanhoLista2 + 1;
        else if (tamanhoLista2 > 0 && tamanhoLista1 == 0)
            return 1 + tamanhoLista2 + 1;
        else if (tamanhoLista2 == 0 && tamanhoLista1 > 0)
            return 1 + tamanhoLista1;
        else return 0;
    }

    @Override
    public int getItemViewType(int position) {

        int tamanhoLista1 = 0;
        int tamanhoLista2 = 0;

        if (lista2 == null && lista1 == null)
            return super.getItemViewType(position);

        if (lista2 != null)
            tamanhoLista2 = lista2.size();
        if (lista1 != null)
            tamanhoLista1 = lista1.size();

        if (tamanhoLista2 > 0 && tamanhoLista1 > 0) {
            if (position == 0) return ITEM_RESULTADO_CABECALHO_VIEW1;
            else if (position == tamanhoLista1 + 1)
                return ITEM_RESULTADO_CABECALHO_VIEW2;
            else if (position > tamanhoLista1 + 1)
                return ITEM_RESULTADO_VIEW2;
            else return ITEM_RESULTADO_VIEW1;

        } else if (tamanhoLista2 > 0 && tamanhoLista1 == 0) {
            if (position == 0) return ITEM_RESULTADO_CABECALHO_VIEW2;
            else return ITEM_RESULTADO_VIEW1;

        } else if (tamanhoLista2 == 0 && tamanhoLista1 > 0) {
            if (position == 0) return ITEM_RESULTADO_CABECALHO_VIEW1;
            else return ITEM_RESULTADO_VIEW1;
        }
        return super.getItemViewType(position);
    }
}

Model

public class Resultado {
private String titulo;
private String descricao;


public Resultado(String titulo, String descricao) {
    this.setTitulo(titulo);
    this.setDescricao(descricao);
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

And the class I use to fill

public class Utils {

public static ArrayList<Resultado> preencherLista1() {
    ArrayList<Resultado> mFirstList = new ArrayList<Resultado>();
    for (int i = 0; i < 10; i++) {
        Resultado mResultado = new Resultado(" " + i, "Descricão " + i);
        mFirstList.add(mResultado);
    }
    return mFirstList;
}

public static ArrayList<Resultado> preencherLista2() {
    ArrayList<Resultado> mSecondList = new ArrayList<Resultado>();
    for (int i = 0; i < 3; i++) {
        Resultado mResultado = new Resultado(" " + i, "Descricão " + i);
        mSecondList.add(mResultado);
    }
    return mSecondList;
}

View main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="inovace.masudias.com.dynamicrecyclerview.MainActivity">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyrcleview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5px"
android:orientation="horizontal">
<TextView
    android:id="@+id/titulo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@android:color/holo_red_dark" />
<TextView
    android:id="@+id/descricao"
    android:paddingLeft="10px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@android:color/holo_green_dark" />

Header item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="Cabeçalho "
    android:textSize="16sp"
    android:textStyle="bold|italic" />

    
asked by anonymous 13.03.2018 / 15:59

0 answers