zoukankan      html  css  js  c++  java
  • 设置ListView显示到最后一行

      上次聊天的那个界面上用的一个TextView,然后每次消息都用text.append("消息内容"+" ")函数来在text字符串后边接一段,然后重新显示这个内容。

      现在需要美化界面,将消息内容放到一个ListView里边,每个消息是一个Item,然后进行显示,效果图如图所示:

      那么问题来了,我每次有新的消息的时候,都会排列在上一个Item的下方,即使到了最底下,最新的消息也会沉到最下边,显示不出来,需要手动滑动屏幕来显示最新消息,显然是不符合实际要求的。于是想了一个办法,让他每次都显示ListView的最后一个Item,我是看的别人的CSDN博客(这里附上Ta的博客链接http://blog.csdn.net/snow12342234/article/details/49794507),这里直接照搬过来,然后供自己以后学习参考:

      

      其实listView元素直接在xml里就可以简单定义实现好这个效果,附带实现的方法三个。
     
      方法1:直接在layout里对listView的属性定义
        StackFromBottom: true
        Transcript Mode: alwayScroll
     
      方法2: 把上面的方法改为java代码的方式声明
        listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
        listView.setStackFromBottom(true);
     
      方法3: 变通的做法 把焦点focus去listView的最后一个item,那自然就是显示最底部
        每次适配器 adapter.notifyDataSetChanged() 之后要记得调用,略麻烦
        注意要用 post的方法确保listview的数据已经加载完毕
    private void scrollMyListViewToBottom() {
        listView.post(new Runnable() {
            @Override
            public void run() {
                // Select the last row so it will scroll into view...
                listView.setSelection(listAdapter.getCount() - 1);
            }
        });
    }

      好了,这三种方法我没有全部尝试,只是用了第二种,直接设置ListView,然后看效果就变成了这样:

      程序还在完善中,回头还会再来补充......

  • 相关阅读:
    Nginx负载均衡+代理+ssl+压力测试
    Nginx配置文件详解
    HDU ACM 1690 Bus System (SPFA)
    HDU ACM 1224 Free DIY Tour (SPFA)
    HDU ACM 1869 六度分离(Floyd)
    HDU ACM 2066 一个人的旅行
    HDU ACM 3790 最短路径问题
    HDU ACM 1879 继续畅通工程
    HDU ACM 1856 More is better(并查集)
    HDU ACM 1325 / POJ 1308 Is It A Tree?
  • 原文地址:https://www.cnblogs.com/cnyulei/p/6853111.html
Copyright © 2011-2022 走看看