您好我有垂直列表(Custom ArrayAdapter),其中每个元素都有一个水平的RecyclerView,给我一个像格式的表。
我想要做的是,如果一行水平滚动,休息行也应如此。我尝试将它们放在水平滚动视图中,并提供各种技巧,但没有运气。
答案 0 :(得分:1)
制作RecyclerView.OnScrollListener
的实例。此实例对于所有您的水平回收站视图都是通用的。调用onScrolled( )
时,滚动除调用它之外的所有视图。
答案 1 :(得分:0)
在Little Child的回答中添加更多内容,它比预期的要复杂,我必须创建一个自定义侦听器,它位于我的主要Activity中,由onScroll调用。这是因为onScroll在getView方法中并且无法访问listview中的其他视图,但我的mainactivty可以访问它们。
在我的listadapter中,我添加了
public interface RecycleListener {
public void onScroll(int scroll_x);
}
然后在getView
中 mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
listener.onScroll(recyclerView.computeHorizontalScrollOffset());
}
});
最后在MainActivity中
dayAdapter.setRecycleListener(new DayAdapter.RecycleListener() {
int busy = 0;
@Override
public void onScroll(int scroll_x)
{
if(busy == 1) return;
busy = 1;
for(int i = 0;i<days.size();i++)
{
View view = lv.getChildAt(i);
if(view == null) continue;
RecyclerView r = (RecyclerView) view.findViewById(R.id.timetable_row_recycler);
LinearLayoutManager layoutManager = ( LinearLayoutManager) r.getLayoutManager();
layoutManager.scrollToPositionWithOffset(0,0-scroll_x);
}
busy = 0;
}
});
注意我发现您可以使用int scroll_x = recyclerView.computeHorizontalScrollOffset()
轻松获取滚动位置,但是没有直接方法可以将其应用回来。方法layoutManager.scrollToPosition(i)
滚动到第i个元素而不是滚动位置,所以唯一正确的方法是
layoutManager.scrollToPositionWithOffset(0,0-scroll_x);
或(如果是自定义布局管理器)
((LinearLayoutManager) layoutManager).scrollToPositionWithOffset(0,0-scroll_x);
我们基本上将负偏移应用于第0个位置,因此不是在0之前滚动到偏移,而是滚动到我们想要的scroll_x。
更新
这工作但导致了很多延迟,所以后来我最终切换到android.widget.TableLayout,并插入行(android.widget.TableRow),就像我正在尝试使用recyclerview。