Android 单个活动中的多个回收视图
我面临着一个设计挑战,我想为一个应用程序设计一个布局,该应用程序以表格的形式显示数据,最左边的第1列是固定的(未更改),最右边的第2列可以在用户按下“下一步”按钮时更改。我最初的方法是使用两个循环视图,一个是垂直视图,另一个是水平视图。因为我在一个arraylist(水平显示)中获得公司名称。一个arraylist中最左边的列是垂直的,其余的数据在一个arraylist中以行的形式显示。然后在“下一步”按钮上,单击“使用表中的下一组元素重新填充回收视图”,数据以矩阵的形式显示。为了直观地展示我想要实现的目标,我设计了一个模型。如果有人知道实现这种布局设计的最佳方法,我非常感谢Android 单个活动中的多个回收视图,android,android-layout,android-recyclerview,tableview,Android,Android Layout,Android Recyclerview,Tableview,我面临着一个设计挑战,我想为一个应用程序设计一个布局,该应用程序以表格的形式显示数据,最左边的第1列是固定的(未更改),最右边的第2列可以在用户按下“下一步”按钮时更改。我最初的方法是使用两个循环视图,一个是垂直视图,另一个是水平视图。因为我在一个arraylist(水平显示)中获得公司名称。一个arraylist中最左边的列是垂直的,其余的数据在一个arraylist中以行的形式显示。然后在“下一步”按钮上,单击“使用表中的下一组元素重新填充回收视图”,数据以矩阵的形式显示。为了直观地展示我想
公共类TableViewActivity2扩展了AppCompatActivity{
私人RecyclerViewRecyclerViewNames、RecyclerViewDDs;
私人客户adapterGames adapterGames;
私人客户适配器dds adapterOdds;
私有ArrayList字符串列表;
private int draggingView=-1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u table\u view\u 2);
AppBarHelper.setAppBarText(这个,R.string.title\u activity\u table\u视图);
Toolbar Toolbar=findviewbyd(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
recyclerViewGames=findViewById(R.id.table\u view\u recycle\u view\u games);
RecycleWebODS=findViewById(R.id.table\u view\u recycle\u view\u赔率);
LinearLayoutManager布局管理器=新的LinearLayoutManager(getApplicationContext(),LinearLayoutManager.VERTICAL,false);
LinearLayoutManager布局管理器2=新的LinearLayoutManager(getApplicationContext(),LinearLayoutManager.VERTICAL,false);
RecycleServiceWgames.setLayoutManager(layoutManager);
RecycleServiceAdds.setLayoutManager(layoutManager2);
stringList=新的ArrayList();
添加(“虚拟”);
添加(“虚拟”);
添加(“虚拟”);
添加(“虚拟”);
添加(“虚拟”);
adapterGames=新的CustomAdapterGames(此为stringList);
adapterOdds=新的CustomAdapterOdds(此为stringList);
recyclerViewGames.setAdapter(adapterGames);
RecycleServiceODS.setAdapter(适配器DDS);
RecycleServiceWgames.addOnScrollListener(scrollListener);
RecycleServiceOdds.addOnScrollListener(scrollListener);
}
private RecyclerView.OnScrollListener scrollListener=new RecyclerView.OnScrollListener(){
@凌驾
CrollStateChanged上的公共无效(RecyclerView RecyclerView,int newState){
super.onScrollStateChanged(recyclerView、newState);
if(recyclerViewGames==recyclerView&&newState==recyclerView.SCROLL\u STATE\u拖动){
拖动视图=1;
}else if(recyclerviewdds==recyclerView&&newState==recyclerView.SCROLL\u STATE\u拖动){
拖动视图=2;
}
}
@凌驾
已填空的公共空间(RecyclerView RecyclerView、int dx、int dy){
super.onScrolled(recyclerView、dx、dy);
如果(draggingView==1&&recyclerView==RecyclerViewNames){
RecycleServiceOdds.scrollBy(dx,dy);
}else if(draggingView==2&&recyclerView==recyclerviewdds){
recyclerViewGames.scrollBy(dx,dy);
}
}
};
}
我面临的问题是,两个RecycleView有时会独立滚动,即使我试图让它们同时滚动 这是基本概念,您可以根据需要设置布局/模型和其他逻辑祝您好运
这是基本概念,您可以根据需要设置布局/模型和其他逻辑祝您好运
第c列和第d列中的数字取决于左列中的选择?解决方案可能是您只使用一个带有
GridLayoutManager
的RecyclerView,并按列排列适配器项=>header1、header2、header3、item11、item12、item12、item13等@LenaBru不,这基本上是一个比较表,用户可以比较来自不同公司的值,这些公司是不相关的。试着从某个角度来看,您只能看到生成该列表所需的1个RecyclerView。如果你能看到,你就明白我的意思了。因为如果你使用超过1个RecyclerView,你将有3个滚动条,每个滚动条都会破坏你的设计。我理解并且我想避免设计问题,我正试图按照设计标准来设计它@HarryTM第c列和第d列中的数字取决于左列中的选择?解决方案可能是您只使用一个带有GridLayoutManager
的RecyclerView,并将适配器项按列排列=>header1、header2、header3、item11、item12、item12、item13等@LenaBru不,这基本上是一个比较表,用户可以比较来自不同公司的值,这些公司是不相关的。试着从某个角度来看,您只能看到生成该列表所需的1个RecyclerView。如果你能看到,你就明白我的意思了。因为如果你使用超过1个RecyclerView,你将有3个滚动条,每个滚动条都会破坏你的设计。我理解并且我想避免设计问题,我正试图按照设计标准来设计它@HarryTM感谢您的解决方案,但是对于第一个固定列,数据在列中,所以垂直列是可以的。第2-10列为行。因此,在本例中,对于第一个块“item1,item2,item3”,为此行获取的数据在本例中为“1.1”,“2.4”,“2.6”和“6”(您可以在gif图像中看到)。我不理解您的列,请重新措辞。我以为你的问题是同步卷轴
public class TableViewActivity2 extends AppCompatActivity {
private RecyclerView recyclerViewGames, recyclerViewOdds;
private CustomAdapterGames adapterGames;
private CustomAdapterOdds adapterOdds;
private ArrayList<String> stringList;
private int draggingView = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_table_view_2);
AppBarHelper.setAppBarText(this, R.string.title_activity_table_view);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
recyclerViewGames = findViewById(R.id.table_view_recycle_view_games);
recyclerViewOdds = findViewById(R.id.table_view_recycle_view_odds);
LinearLayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.VERTICAL,false);
LinearLayoutManager layoutManager2 = new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.VERTICAL,false);
recyclerViewGames.setLayoutManager(layoutManager);
recyclerViewOdds.setLayoutManager(layoutManager2);
stringList = new ArrayList<>();
stringList.add("dummy");
stringList.add("dummy");
stringList.add("dummy");
stringList.add("dummy");
stringList.add("dummy");
adapterGames = new CustomAdapterGames(this, stringList);
adapterOdds = new CustomAdapterOdds(this, stringList);
recyclerViewGames.setAdapter(adapterGames);
recyclerViewOdds.setAdapter(adapterOdds);
recyclerViewGames.addOnScrollListener(scrollListener);
recyclerViewOdds.addOnScrollListener(scrollListener);
}
private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (recyclerViewGames == recyclerView && newState == RecyclerView.SCROLL_STATE_DRAGGING) {
draggingView = 1;
} else if (recyclerViewOdds == recyclerView && newState == RecyclerView.SCROLL_STATE_DRAGGING) {
draggingView = 2;
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (draggingView == 1 && recyclerView == recyclerViewGames) {
recyclerViewOdds.scrollBy(dx, dy);
} else if (draggingView == 2 && recyclerView == recyclerViewOdds) {
recyclerViewGames.scrollBy(dx, dy);
}
}
};
}