Android 使用addview生成列表,界面切换时将指定的行数滚动到列表的第一行

来源:互联网 发布:天猫和淘宝价格对比 编辑:程序博客网 时间:2024/04/30 10:44

      项目中有界面是利用scrollview,来实现左侧固定,下方和右侧同时滚动的功能,这里只能使用addview一个个将textview放到linearLayout里面,但之后又有一个需求是,切面切换时,需要将所制定的某一行置顶,解决方式如下:


   1.将所需要置顶的那行,取一个textview出来,存放到map中,如下代码:

String intstument = fixedLeftList.get(rank).get(open_LeftData[0]).toString();if (jumpInstrument.containsKey(intstument)) {} else {jumpInstrument.put(intstument, textView);}


  2.到从另一个界面跳转回该界面时,需要进行高度的计算,然后使用scrollto方法将整个scrollview移动,如下代码:
String instrumentSumm = DocCaptain.getInstance().getSummaryInstrument();int parentHeight = open_main_scroll.getMeasuredHeight();int bottomHeight = jumpInstrument.get(instrumentSumm).getTop();int insHeight = jumpInstrument.get(instrumentSumm).getHeight();int offset = (bottomHeight - parentHeight) + (parentHeight - insHeight) + insHeight;System.out.println("該商品距離父佈局的高度為" + jumpInstrument.get(instrumentSumm).getTop() + "移動的距離為" + offset);open_main_scroll.smoothScrollTo(0, offset);

注:计算往上移动的高度,是通过计算:scrollview的整体高度,每行占据的高度,该textview距离父scrollview的高度,进行一些简单的运算即可.


//========================分割线,2016年5月26日15:07:13=====================================

遇到的问题是有时候scrollto无法执行,有时候有些界面数据少就会执行,所以使用handler进行延迟处理,就好了,如下代码:

if (JumpFragmentCaptain.getInstance().isOrderJump()) {handler.postDelayed(new Runnable() {@Overridepublic void run() {//指定选中的单号那一行,當從新增挂单/修改挂单/删除挂单界面時,需要將制定的商品滾動到第一列置顶.\//监听保存的textview的高度变化,每次刷新都会执行int parentHeight = order_main_scroll.getMeasuredHeight();//父scroll的整个高度int bottomHeight = jumpOrderTop.get(orderPosition).getTop();//所指定的textview距离父布局的高度int insHeight = jumpOrderTop.get(orderPosition).getHeight();//每行占据的高度//根据上述的数据,计算需要滚动的距离,以便让置顶的行置顶.int offset = (bottomHeight - parentHeight) + (parentHeight - insHeight) + insHeight;order_main_scroll.smoothScrollTo(0, offset);System.out.println("該商品距離父佈局的高度為" + jumpOrderTop.get(orderPosition).getTop() + "每个textview自身的高度"+ jumpOrderTop.get(orderPosition).getHeight() + "移動的距離為" + offset);}}, 2000);}



写的很乱,有问题可以讨论.提供如果不是使用listview如何将某一行置顶的方法.


0 0
原创粉丝点击