TableLayout с RecyclerView

Для RecyclerView существует только два менеджера компоновки: LinearLayoutManager и GridLayoutManager . Есть ли способ использовать TableLayout качестве менеджера макетов с RecyclerView ? Любое предложение?

EDIT: Интересно, есть ли какое-либо решение без написания диспетчера компоновки с нуля. Поведение TableLayout достаточно для меня, просто хочу добавить функцию рециркуляции для проблем с производительностью при обработке большого количества данных.

И создание таблицы, выглядящей в списке, не решает мою проблему, я думаю, потому что моя таблица очень динамична, я не знаю даже имен столбцов, клиент решает все детали таблицы. Таким образом, ячейки будут настраиваться, ширина столбцов должна быть автоматически изменена, зависит от длины содержимого. Я не думаю, что список может справиться с этим.

Заранее спасибо за помощь.

Solutions Collecting From Web of "TableLayout с RecyclerView"

Посмотрите на эту библиотеку . Кажется, это именно то, что вам нужно. Он также имеет систему рециркуляции.

Существует множество библиотек и кодов с открытым исходным кодом, доступных для выяснения того, как он может быть разработан.

  1. https://github.com/evrencoskun/TableViewSample
  2. https://github.com/HYY-yu/TableRecyclerView
  3. https://github.com/Cleveroad/AdaptiveTableLayout
  4. https://github.com/celerysoft/TableFixHeaders

Я бы рекомендовал вам создать собственное представление таблицы с помощью вложенного RecyclerView , элементы которого представляют строки таблицы, и каждый элемент имеет RecyclerView который показывает столбцы ячейки. Таким образом, вы можете легко создавать ячейки таблицы динамически. И каждый recyclerviews обрабатывает собственные управления памятью, повторно использует все держатели ячеек.

Именно так:

Введите описание изображения здесь

Вы можете использовать Android RecyclerView с примером GridView GridLayoutManager

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

Android RecyclerView с примером GridView GridLayoutManager.

Код для файла 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); } } 

Код для файла макета 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> 

Код для файла 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; } } 

Код для файла макета 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/

Или следуйте простому расположению таблиц таблиц в стиле стола – просто используйте

Создайте собственную строку с linearlayout и добавьте эту строку в recyclerView Adapter, это только решение для создания таблицы типа Structure в RecyclerView.