Android開發日常-listVIiew嵌套webView回顯閱讀位置


       詳情頁布局結構

需求是回顯webview展示網頁的閱讀位置

方案1:

使用webview.getScrollY()獲取滑動到的位置,用setScrollY()回顯設置,

但是兩個方法都出現了問題,getScrollY()時獲取得到的值始終是0,由於使用的是騰訊

的x5內核,參考x5論壇的方法使用getWebScrollY(),但獲取到的值一樣是0,沒有找到解決方法。

使用ScrollTo()的時候,webView在整個listView中的位置向上移動了,而且不能再滑上去了。

這個方案只能放棄。

方案2:

使用listView.ScrollTo(x,y)精確定位回顯

本來以為這個方法可行,結果listView.getScrollY()獲取到的值依然是0,無法記錄滑動到的位置。

ScrollTo()方法倒是可用,但也遇到了新的問題--手指觸發滑動事件時會時listView又跑到最頂部去了!

。感覺這個方案應該是可行的,就看后續怎么解決了。

                                      

 

---未完待續

 

 2017/04/20

經過兩天的不懈努力,就在我快要放棄跟產品說這個功能實現不了的時候,找到了最終的解決方案。

兩步實現:

1.保存listview滾動的位置,在自定義view中實現

    private int m_nItemCount;
    private int[] m_nItemOffY;

    public int getListItemsHeight() {
        ListAdapter adapter =  getAdapter();
        m_nItemCount = adapter.getCount();
        int height = 0;
        int i;

        m_nItemOffY = new int[m_nItemCount];

        for (i = 0; i < m_nItemCount; ++i) {
            View view = adapter.getView(i, null, this);

            view.measure(MeasureSpec.makeMeasureSpec(0,         MeasureSpec.UNSPECIFIED),
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

            m_nItemOffY[i] = height;
            height += view.getMeasuredHeight();
        }

        return height;
    }

    public int getListScrollY() {
        int pos, nScrollY, nItemY;
        View view;

        pos = getFirstVisiblePosition();
        view = getChildAt(0);
        nItemY = view.getTop();
        nScrollY = m_nItemOffY[pos] - nItemY;

        return nScrollY;
    }

2.再次進入時滾動到上次保存的位置,主要是使用setSelectionFromTop()這個方法,依然是在自定義view中添加,在activity中調用

 public void scrollBy(int px){
        setSelectionFromTop(getFirstVisiblePosition() , getChildAt(0).getTop() - px);
    }

關鍵是第二個參數,雖然保存的是滑動到的距離的pixel值,但是經測試,這里的第二個值應該是保存的值的負數

看下源碼中對第二個參數的解釋:

@param y The distance from the top edge of the ListView (plus padding) that the
     *        item will be positioned.

但是為什么是負的我還是不清楚,望知道的網友告知。

 

 

---問題搞定,結貼!

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM