Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有RecyclerView的TableLayout_Android_Android Recyclerview - Fatal编程技术网

Android 带有RecyclerView的TableLayout

Android 带有RecyclerView的TableLayout,android,android-recyclerview,Android,Android Recyclerview,RecyclerView只有两个布局管理器:LinearLayoutManager和GridLayoutManager。有没有办法将TableLayout用作带有RecyclerView的布局管理器?有什么建议吗 编辑:我想知道如果没有从零开始编写布局管理器,是否有任何解决方案TableLayout行为对我来说已经足够了,我只想为处理大量数据的性能问题添加回收功能 我认为,创建一个具有表外观的listview并不能解决我的问题,因为我的表非常动态,我甚至不知道列名,客户决定了表的所有细节。所以单

RecyclerView
只有两个布局管理器:
LinearLayoutManager
GridLayoutManager
。有没有办法将
TableLayout
用作带有
RecyclerView
的布局管理器?有什么建议吗

编辑:我想知道如果没有从零开始编写布局管理器,是否有任何解决方案
TableLayout
行为对我来说已经足够了,我只想为处理大量数据的性能问题添加回收功能

我认为,创建一个具有表外观的listview并不能解决我的问题,因为我的表非常动态,我甚至不知道列名,客户决定了表的所有细节。所以单元格是自定义的,列宽需要根据内容长度自动调整大小。我认为listview无法处理这个问题


提前感谢您的帮助。

使用linearlayout创建一个自定义行,然后将该行附加到recyclerView适配器这是在recyclerView中创建类似表格结构的唯一解决方案

您可以将Android RecyclerView与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);

    }
}
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;
    }
}
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>
<?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>

或者按照简单的表格布局查看一下。看来这正是你需要的。它还有一个回收系统


有许多开源库和代码可用于了解如何开发它


  • 我试着做了一个类似桌子的结构,效果很好

    对于RecyclerView的适配器实现, 为每一行创建一个水平滚动视图布局,并将所有元素放在其中的适配器布局xml中

    在添加回收器视图的主布局xml中,添加一个HorizontalScrollView作为其父视图。 现在,将TableLayout添加到HorizontalScrollView

    我正在为适配器布局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>
    
    <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>
    
    
    
    我正在为主布局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>
    
    <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>
    
    
    
    这将确保您能够使用recyclerview拥有一个类似于表的结构来水平和垂直滚动

    HorizontalscrollView允许您在TableLayout内水平滚动整个列表。RecyclerView允许您垂直滚动列表


    希望这对您有用。

    您的要求是什么?我需要实现一个动态表视图,它将使用大量数据。因此,我认为它必须以某种方式被重用到性能发布。你能显示,你的实际需求比我们能更容易地帮助你。如果你还没有看到它,也可以考虑谷歌的新的FrimBox布局:这是创建固定大小的行和列。我需要一个动态表,该表中的列可以根据内容调整大小。@JosephK.,您可以在LinearLayout/RelativeLayout中使用自定义布局,并将包装内容与RecycleService一起使用。这很好,我已经找到了它。谢谢分享。我仍然在寻找它的架构,它似乎没有自动大小列功能。而且我认为它的代码太复杂,无法维护和添加新功能。@JosephK。嗯,我想你有一个非常重要的问题,它假设了一些复杂的非常普通的编码。因此,人们期望你应该思考很多如何实施它:)我认为,根据你的需要进行回购和调整不会有任何问题。是的,你需要根据你的单元格内容自己计算布局大小,所以你可能会有类似于
    AutoSizeRelativeLayout
    的东西。当然,我完全理解在android中实现复杂表格是很困难的。我仍在研究这个和其他github项目,以找到实现表视图的最佳方法。感谢
    AutoSizeRelativeLayout
    tip.btw,+1提供提示和指导。感谢链接。嵌套
    RecyclerView
    是个好主意。我会给它一个机会。@Zilk我怎么能用这个水平滚动到想要的位置?