2016-01-19 62 views

回答

0

我會假設你正在做的相似,我做了什麼,你有某種表格視圖和HorizontalScrollView s爲所有相同的寬度。

這是我做的:

首先,我做了一個自定義的HorizontalScrollView所以我能得到事件通知,當有人刷卡:

public class HorizontalScrollView extends android.widget.HorizontalScrollView { 

    private OnScrollListener mListener; 

    public HorizontalScrollView(Context context) { 
     super(context); 
    } 

    public HorizontalScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public HorizontalScrollView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setOnScrollListener(OnScrollListener listener) { 
     mListener = listener; 
    } 

    @Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     super.onScrollChanged(l, t, oldl, oldt); 
     if (mListener != null) { 
      mListener.onScrollChanged(this, l); 
     } 
    } 

    public interface OnScrollListener { 
     public void onScrollChanged(View view, int scrollX); 
    } 
} 

然後,當我創建ViewHolder的I添加一個偵聽器,將所有視圖設置爲相同的scrollX:

view.setOnScrollListener(new OnScrollListener() { 

     @Override 
     public void onScrollChanged(View scrollView, int scrollX) { 

      for (int i = 0; i < recyclerView.getChildCount(); i++) { 
       View child = recyclerView.getChildAt(i); 
       if (child instanceof HorizontalScrollView && child != scrollView) { 
        HorizontalScrollView scrollView2 = (HorizontalScrollView) child; 
        if (scrollView2.getScrollX() != scrollX) { 
         scrollView2.setScrollX(scrollX); 
        } 
       } 
      } 
     } 
    }); 

此代碼僅用於說明目的;不要指望複製/粘貼它並使其工作。

我假設您的ViewHolder可以獲得對您的RecyclerView的引用來訪問所有當前列表項。

此代碼出現了一些問題,當你刷一個圖,然後刷卡另一種觀點認爲,而一切都還沒有從第一刷卡移動,事情會變得不同步。但這是一個讓你開始朝着積極方向發展的基本理念。

+0

我不明白什麼查看您設置OnScrollListener –

+0

'view'在這種情況下是之前列出的特殊'Horizo​​ntalScrollView'類。這是爲您的ViewHolder創建的視圖。當你設置你的'ViewHolder'時,你在這個視圖上設置了監聽器。如果我把它叫做'itemView'就好像它在'ViewHolder'構造函數中,那麼這可能會更有意義。 –

相關問題