详情页布局结构

需求是回显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. 遍历DOM树,链式操作

    如果需要在同一个选取结果上使用多个jQuery方法,可以同时列出这些方法,并用.隔开,如下面的代码. 1 $("#one").hide().delay(500).fadeIn(15 ...

  2. Ubuntu网卡配置

    目录 1.查看所有可用网卡 2.编辑配置文件 3.添加可用网卡信息 4.重启网络服务 5.查看网卡信息 1.查看所有可用网卡 $ ifconfig -a # -a display all interf ...

  3. C#格式化数值结果表(格式化字符串)

    字符 说明 示例 输出 C 货币 string.Format("{0:C3}", 2) $2.000 D 十进制 string.Format("{0:D3}", ...

  4. Delphi判断是否有全屏程序

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  5. maven 创建war类型项目

    1. 创建maven project时选择packaging为war 2. 在webapp文件夹下新建META-INF和WEB-INF/web.xml 3. 在pom.xml中添加web项目需要的ja ...

  6. php页面开启错误提示

    ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);

  7. eclipse老运行上一个程序之原因总结

    运行eclipse有的时候不运行刚写的类,老是运行别的以前的类,删除了以前的类就啥都不运行.找了好久的原因,最后发现,刚写的类没有main()或者有误.这和java的特点有关,程序的运行总是main( ...

  8. 自己电脑能ping别人的,但别人电脑去不能跟我们的电脑通信

    记住一点:多半时防火墙出了问题. 打开“控制面板”——点击“系统和安全”——“Windows防火墙”——点击“打开或关闭”Windows防火墙--点击家庭组网络或者工作组网络——关闭家庭组和工作组的防 ...

  9. springMVC :interceptors

    1.配置拦截器 在springMVC.xml配置文件增加:     <mvc:interceptors>    <!-- 日志拦截器 -->    <mvc:interc ...

  10. VSC KeyNote

    [VSC KeyNote] 1.前后跳转. Alt + LeftArrow, Alt + RightArrow 2.缩进问题. vsc默认缩进为4,但js代码里缩进依旧是2. 因为vscode默认启用 ...