41 votes

TableLayout avec RecyclerView

Il n'y a que deux gestionnaires de mise en page pour RecyclerView : LinearLayoutManager y GridLayoutManager . Existe-t-il un moyen d'utiliser TableLayout en tant que responsable de la mise en page avec RecyclerView ? Une suggestion ?

EDIT : Je me demande s'il existe une solution sans écrire un gestionnaire de mise en page à partir de zéro. TableLayout Le comportement est suffisant pour moi, je veux juste ajouter la fonction de recyclage pour les problèmes de performance lors de la manipulation de grandes quantités de données.

Et la création d'une table regardant listview ne résout pas mon problème je pense, parce que ma table est très dynamique, je ne sais pas même les noms de colonne, le client décidant tous les détails de la table. Les cellules doivent donc être personnalisées, la largeur des colonnes doit être redimensionnée automatiquement en fonction de la longueur du contenu. Je ne pense pas que listview puisse gérer cela.

Merci d'avance pour votre aide.

0 votes

Quelles sont vos exigences ?

1 votes

0 votes

J'ai besoin d'implémenter une vue de table dynamique qui utilisera une grande quantité de données. Je pense donc qu'il doit être utilisé d'une manière ou d'une autre RecyclerView pour des questions de performance.

35voto

ziLk Points 2219

0 votes

Merci pour les liens. Emboîté RecyclerView est une bonne idée. Je vais lui donner une chance.

0 votes

@Zilk comment puis-je faire défiler à la position désirée horizontalement en utilisant ceci ?

10voto

rom4ek Points 2977

Jetez un coup d'œil à ceci bibliothèque . Il semble que c'est exactement ce dont vous avez besoin. Il a aussi un système de recyclage.

0 votes

C'est bien, je l'ai déjà trouvé. Merci de le partager. Je suis toujours en train de regarder son architecture et il semble qu'il n'y ait pas de fonction de dimensionnement automatique des colonnes. Et aussi je pense que son code est trop complexe à maintenir et à ajouter de nouvelles fonctionnalités.

0 votes

@JosephK. Eh bien, je pense que vous avez une question non triviale, qui suppose un codage extra-ordinaire complexe. Il est donc normal que vous réfléchissiez beaucoup à la façon de l'implémenter :) Je ne vois pas de problèmes pour bifurquer le dépôt et l'adapter à vos besoins. Et oui, vous aurez besoin de calculer la taille de la mise en page par vous-même en fonction du contenu de votre cellule, donc supposément vous aurez quelque chose comme AutoSizeRelativeLayout .

0 votes

Bien sûr, je comprends parfaitement qu'il est difficile d'implémenter un tableau complexe dans Android. Je suis toujours en train de regarder ce projet et d'autres projets github pour trouver la meilleure façon de mettre en œuvre une vue de tableau. Merci pour AutoSizeRelativeLayout conseil.

0voto

koushick Points 29

J'ai essayé cette méthode pour créer une structure de type tableau, et ça a marché.

Pour la mise en œuvre de l'adaptateur de votre RecyclerView, créez un layout Horizontalscrollview, et placez tous vos éléments à l'intérieur de celui-ci, dans le layout xml de votre adaptateur pour chaque ligne.

Dans le layout principal xml où vous ajoutez la vue du recycleur, ajoutez un HorizontalScrollView comme parent. Maintenant, ajoutez un TableLayout à l'HorizontalScrollView.

J'ajoute le code ci-dessous pour l'adaptateur layout xml :

<HorizontalScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/horizontalScroll"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!--Any custom layout here as per your need-->
</HorizontalScrollView>

J'ajoute le code ci-dessous pour le xml de la mise en page principale :

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <HorizontalScrollView>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/empView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="select"
        android:scrollbars="vertical">        
    </android.support.v7.widget.RecyclerView>
        </HorizontalScrollView>

</TableLayout>

Cela vous permettra d'avoir une structure de type tableau à faire défiler horizontalement et verticalement à l'aide de recyclerview.

L'HorizontalscrollView vous permet de faire défiler horizontalement la liste entière dans le TableLayout. Le RecyclerView vous permet de faire défiler verticalement la liste.

J'espère que cela vous conviendra.

-2voto

PArth SOni Points 68

Créez une ligne personnalisée avec linearlayout et attachez ensuite cette ligne à RecyclerView Adapter. C'est la seule solution pour créer une structure de type tableau dans RecyclerView.

-2voto

omor Points 741

Vous pouvez utiliser le tutoriel d'exemple Android RecyclerView avec GridView GridLayoutManager.

http://www.Android-examples.com/Android-recyclerview-with-gridview-gridlayoutmanager/

Tutoriel d'exemple de RecyclerView Android avec GridView GridLayoutManager.

Code pour le fichier MainActivity.java.

package com.android_examples.recyclerviewgridview_android_examplescom;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;

    Context context;

    RecyclerView.Adapter recyclerView_Adapter;

    RecyclerView.LayoutManager recyclerViewLayoutManager;

    String[] numbers = {
            "one",
            "two",
            "three",
            "four",
            "five",
            "six",
            "seven",
            "eight",
            "nine",
            "ten",
            "eleven",

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        context = getApplicationContext();

        recyclerView = (RecyclerView) findViewById(R.id.recycler_view1);

        //Change 2 to your choice because here 2 is the number of Grid layout Columns in each row.
        recyclerViewLayoutManager = new GridLayoutManager(context, 2);

        recyclerView.setLayoutManager(recyclerViewLayoutManager);

        recyclerView_Adapter = new RecyclerViewAdapter(context,numbers);

        recyclerView.setAdapter(recyclerView_Adapter);

    }
}

Code pour le fichier de mise en page activity_main.xml.

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.android_examples.recyclerviewgridview_android_examplescom.MainActivity"
    android:id="@+id/relativelayout">

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

</RelativeLayout>

Code pour le fichier RecyclerViewAdapter.java.

package com.android_examples.recyclerviewgridview_android_examplescom;
import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by JUNED on 6/16/2016.
 */
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{

    String[] values;
    Context context1;

    public RecyclerViewAdapter(Context context2,String[] values2){

        values = values2;

        context1 = context2;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder{

        public TextView textView;

        public ViewHolder(View v){

            super(v);

            textView = (TextView) v.findViewById(R.id.textview1);

        }
    }

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

        View view1 = LayoutInflater.from(context1).inflate(R.layout.recycler_view_items,parent,false);

        ViewHolder viewHolder1 = new ViewHolder(view1);

        return viewHolder1;
    }

    @Override
    public void onBindViewHolder(ViewHolder Vholder, int position){

        Vholder.textView.setText(values[position]);

        Vholder.textView.setBackgroundColor(Color.CYAN);

        Vholder.textView.setTextColor(Color.BLUE);

    }

    @Override
    public int getItemCount(){

        return values.length;
    }
}

Code pour le fichier de mise en page recycler_view_items.xml.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cardview1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardElevation="7dp"
    card_view:contentPadding="7dp"
    card_view:cardCornerRadius="7dp"
    card_view:cardMaxElevation="7dp"
    >

        <TextView
            android:id="@+id/textview1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="20dp"
            android:textStyle="bold"
            android:padding="10dp"
            android:layout_gravity="center"
            android:gravity="center"
            />
</android.support.v7.widget.CardView>

http://www.Android-examples.com/Android-recyclerview-with-gridview-gridlayoutmanager/

ou suivre la mise en page d'un tableau simple Mise en page des tables Android - exemple simple

0 votes

Il s'agit de créer des lignes et des colonnes de taille fixe. J'ai besoin d'un tableau dynamique dont les colonnes pourraient être redimensionnées en fonction du contenu.

0 votes

@JosephK., vous pouvez utiliser une mise en page personnalisée dans LinearLayout/RelativeLaout avec wrap_content avec RecyclerView.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X