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我怎么能用这个水平滚动到想要的位置?