项目中有界面是利用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); }
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);
//========================分割线,2016年5月26日15:07:13=====================================
遇到的问题是有时候scrollto无法执行,有时候有些界面数据少就会执行,所以使用handler进行延迟处理,就好了,如下代码:
if (JumpFragmentCaptain.getInstance().isOrderJump()) { handler.postDelayed(new Runnable() { @Override public 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如何将某一行置顶的方法.