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

      项目中有界面是利用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() {

					@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如何将某一行置顶的方法.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值