我决定使用固定列(左侧)进行像tablelayout这样的控制..所以我根据RelativeLayout创建了自己的类。该类包含两个scrollView:_scrollViewLeft和_scrollViewRight(每个都包含tableLayout)。一切正常(数据存在,列和行对齐,表格高度相同)但滚动一个scrollView不会滚动另一个。我不知道问题在于控件是否放在ViewPager里面的Fragment中。
这是scrollView类,应该可以同步两个
private class MatrixScrollView : ScrollView
{
public MatrixScrollView(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
protected override void OnScrollChanged(int l, int t, int oldl, int oldt)
{
if (Tag.ToString() == "scrollViewLeft")
_scrollViewRight.ScrollTo(0, t);
else
_scrollViewLeft.ScrollTo(0, t);
}
}
只是为了说清楚:如果你在某个方向线上滚动scrollViewLeft _scrollViewRight.ScrollTo(0,t); 执行 - 但它没有做任何事情_scrollViewRight保持原状。
我的控件基于this
答案 0 :(得分:0)
可能是ViewPager或生命周期和Tag属性的混淆。所以我传递了连接scrollView的实例 - 它工作。
public class MatrixScrollView : ScrollView
{
public MatrixScrollView(Context context, IAttributeSet attrs) : base(context, attrs)
{
VerticalScrollBarEnabled = false;
OverScrollMode = OverScrollMode.Never;
}
public void SetConnectedScrollView(MatrixScrollView connectedScrollView)
{
_connectedScrollView = connectedScrollView;
}
MatrixScrollView _connectedScrollView;
bool _isTouchScroll = true;
public void ScrollThisView(int l, int t)
{
_isTouchScroll = false;
ScrollTo(l, t);
_isTouchScroll = true;
}
protected override void OnScrollChanged(int l, int t, int oldl, int oldt)
{
base.OnScrollChanged (l, t, oldl, oldt);
if(_isTouchScroll)
_connectedScrollView.ScrollThisView(l, t);
}
}