博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListView的定位
阅读量:6619 次
发布时间:2019-06-25

本文共 2600 字,大约阅读时间需要 8 分钟。

hot3.png

解决方法:

// 保存当前第一个可见的item的索引和偏移量int index = mList.getFirstVisiblePosition();View v = mList.getChildAt(0);int top = (v == null) ? 0 : v.getTop();// ...//根据上次保存的index和偏移量恢复上次的位置mList.setSelectionFromTop(index, top);

 这里使用了setSelectionFromTop来ListView。其实还可以使用setSelection也可以定位,只是setSelectionFromTop要比setSelection更精准。因为通过getFirstVisiblePosition得到的第一个item可能已经有一部分是不可见的了,如果用setSelection无法反映出这不可见的部分。

来看一个自己写的列子:

 MainActivity.java:

public class MainActivity extends Activity { private ListView lv_lists; private Button mBtn_show; private Button mBtn_save; private LinearLayout mLl_show; private int index; // 保存上一次列表索引 private int top; // 保存上一次Y轴设置的偏移量 @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mLl_show = (LinearLayout) findViewById(R.id.ll_show);  lv_lists = (ListView) findViewById(R.id.lv_lists);  lv_lists.setAdapter(new ArrayAdapter
(this,    android.R.layout.simple_list_item_1, getData()));  lv_lists.setOnScrollListener(new OnScrollListener() {   @Override   public void onScrollStateChanged(AbsListView view, int scrollState) {    // TODO Auto-generated method stub    // Log.d("TAG", "XIXI->" + scrollState);    switch (scrollState) {    case 0:     mLl_show.setVisibility(View.VISIBLE);     break;    default:     mLl_show.setVisibility(View.GONE);     break;    }   }   @Override   public void onScroll(AbsListView view, int firstVisibleItem,     int visibleItemCount, int totalItemCount) {    // TODO Auto-generated method stub    // Log.d("TAG",view.getId()+", "+firstVisibleItem+", "+visibleItemCount+", "+totalItemCount);   }  });  mBtn_show = (Button) findViewById(R.id.btn_show);  mBtn_show.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    // TODO Auto-generated method stub    lv_lists.setSelectionFromTop(index, top);   }  });  mBtn_save = (Button) findViewById(R.id.btn_save);  mBtn_save.setOnClickListener(new View.OnClickListener() {   @Override   public void onClick(View v) {    // TODO Auto-generated method stub    index = lv_lists.getFirstVisiblePosition();    View v1 = lv_lists.getChildAt(0);    top = (v1 == null) ? 0 : v1.getTop();    // Log.d("TAG",index+", "+top+",");   }  }); } private String[] getData() {  // TODO Auto-generated method stub  String temp[] = new String[100];  for (int i = 0; i < temp.length; i++) {   temp[i] = "我是第" + i + "个选项";  }  return temp; }}

activity_main.xml:

    
    
        
        
    

转载于:https://my.oschina.net/u/660536/blog/371480

你可能感兴趣的文章
Python3.5修炼手册8
查看>>
IT行业的精英们,你真的懂如何比较工资吗?
查看>>
ssh 主要配置参数说明
查看>>
vCenter Server 5.1 Required Ports
查看>>
监控cpu负载的脚本
查看>>
awk多文件的处理
查看>>
linux虚拟文件系统浅析
查看>>
Centos7 系统安装
查看>>
JDBC的轻量级封装DBUtils开源组件的使用(一)
查看>>
find 文件中字符串搜索
查看>>
环境考查与探测-虚拟终端网络工程实施
查看>>
撮合系统
查看>>
Android Studio 快捷键
查看>>
在web.xml文件中使用EL表达式配置变量例子
查看>>
python小程序
查看>>
专业才是王道
查看>>
Struts2.3.1.2+Hibernate3.5.5+Spring3.1.1所必要的Jar包
查看>>
交换机的“TRUNK”的配置
查看>>
Nginx禁止ip访问站点
查看>>
100万个数中找出最大的前K个数
查看>>