详情页布局结构

需求是回显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.

但是为什么是负的我还是不清楚,望知道的网友告知。

---问题搞定,结贴!

Android开发日常-listVIiew嵌套webView回显阅读位置的更多相关文章

  1. Android开发:ScrollView嵌套GridView的解决办法

    Android开发:ScrollView嵌套GridView的解决办法   前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便 ...

  2. Android 开发日常积累

    Android 集合 Android 开源项目分类汇总 扔物线的 HenCoder 高级 Android 教程 hencoder HenCoder:给高级 Android 工程师的进阶手册 Andro ...

  3. Android开发-API指南-任务和回退栈

    Task and Back Stack 英文原文: http://developer.android.com/guide/components/tasks-and-back-stack.html 采集 ...

  4. Android开发之常用框架WebView详解代码。超详细,送给初学者,完全掌握此控件

    这是我特意为新手小白写的一个代码,教大家完完全全掌握WebView, 我感觉,你看懂这个,基本上可以满足以后工作中的需要了,(只针对Webview的使用),但是其实它还有好多功能,比如真正的设计到和H ...

  5. Android开发日常-listview滚动方法梳理

    listview滚动方法梳理 1.setSelection(position); 滚动到指定条目 2.setSelectionFromTop(position,y): 距离指定条目向下偏移y(像素) ...

  6. android开发学习 ------- git - 将代码回滚到任意版本

    不小心将一个东西错误提交到git - 远程仓库上 参考  https://www.cnblogs.com/wancy86/p/5848024.html 你的git可能关联了多个远程仓库,每个关联的代码 ...

  7. Android开发之定义app在手机的安装位置

    定义app在手机的安装位置,可以通过在清单文件中添加属性 android:installLocation="" 该属性有三个值:auto(自动),preferExternal(外部 ...

  8. JFrome 登陆/注册/回显无数据库连接小程序

    当离开RCP插件区重新回顾一下JFrame窗口程序的标签.页面间的跳转. 完成一个登陆.注册界面.(界面完成后练习输入输出流,将前台的注册信息保存到一个文件夹下的.txt文件中) 首先向通过JFram ...

  9. Androidproject师进阶之路 :《Android开发进阶:从小工到专家》上市啦!

    封面 文件夹1 文件夹2 - 当当购买链接 - 京东购买链接 为什么写这本书 写这本书的念头由来已久了. 或许是从我打算写<Android源代码设计模式解析与实战>那时起就萌生了这个念头, ...

随机推荐

  1. 【379】pandas 说明

    参考:Part 1 参考:Part 2

  2. 将IP地址字符串转为32位二进制

    def str2bin(s): temp = s.split('.') result = '' for i in range(len(temp)): temp[i] = str(bin(int(tem ...

  3. 在服务器上同时启动多个tomcat

    我所用Tomcat服务器都为zip版,非安装版.以两个为例:安装第二个Tomcat完成后,到安装目录下的conf子目录中打开server.xml文件,查找以下三处:(1) 修改http访问端口(默认为 ...

  4. 最干净,最便捷的卸载Mysql

    由于没有卸干净Mysql,用一下就崩溃了,使用这个步骤,都不用重装系统 1,停止Mysql服务,卸载MySQL 2,删除安装目录及数据存放目录 注: 默认安装路径:C:\Program Files\M ...

  5. 25. IO流.md

    目录 IO分类: 1.FIle类 1.1目录分隔符 1.2常用方法 2.FileInputStream类 2.1读取文件 3.FileOutputStream类 拷贝文件 4.缓冲流 4.1 Buff ...

  6. 获取字段唯一值工具- -ArcPy和Python案例学习笔记

    获取字段唯一值工具- -ArcPy和Python案例学习笔记   目的:获取某一字段的唯一值,可以作为工具使用,也可以作为函数调用 联系方式:谢老师,135-4855-4328,xiexiaokui# ...

  7. javascript原型链中 this 的指向

    为了弄清楚Javascript原型链中的this指向问题,我写了个代码来测试: var d = { d: 40 }; var a = { x: 10, calculate: function (z) ...

  8. Nginx深度优化

    简介 1.隐藏版本号2.修改Nginx用户与组3.配置Nginx网页缓存时间4.实现Nginx的日志切割5.配置Nginx实现连接超时6.更改进程数7.配置Nginx实现网页压缩功能8.配置Nginx ...

  9. linux下arm汇编的常用指令解析

    1. ldr 和 str : (1) ldr 作为指令,叫做寄存器加载指令.将内存中的值加载到寄存器中. (2) ldr 作为伪指令,实现一个32位常数或地址值加载到寄存器中.后面加载的常量或地址值标 ...

  10. svn转git合并代码

    在Git Bash 中输入 git-svn clone http://devsvnread.uuzuonline.net/GOT_PRIVATE/server/ --no-metadata -T tr ...