当前位置:  编程技术>移动开发
本页文章导读:
    ▪Listview推迟加载数据(转)        Listview延迟加载数据(转) 在现在的SINA微博或者象twitter、dzone等网站中,当加载一个很长的列表时,往往都是先加载部分内容,然后当用户用拖拉条往下拖动时,再加载更多的内容。这里在android.........
    ▪ 替动态添加的控件添加点击响应事件        为动态添加的控件添加点击响应事件 当一个控件是动态添加的时,在该控件的setOnClickListener函数中new一个线程,这个线程去启动一个handler,在handler中修改界面或操作。 ......
    ▪ 程序异常处理全局处理       程序错误处理全局处理 http://blog.csdn.net/liangguohuan/archive/2010/11/19/6022419.aspx ......

[1]Listview推迟加载数据(转)
    来源: 互联网  发布时间: 2014-02-18
Listview延迟加载数据(转)
在现在的SINA微博或者象twitter、dzone等网站中,当加载一个很长的列表时,往往都是先加载部分内容,然后当用户用拖拉条往下拖动时,再加载更多的内容。这里在android 中,可以用listview搭配线程实现同样的功能,举例如下:

首先设置footer部分,即在listview的下面设置footview,footview的模版如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

android:orientation="horizontal" 

android:layout_width="fill_parent" 

android:gravity="center_horizontal" 

android:padding="3dp" 

android:layout_height="fill_parent"> 



<TextView 

android:id="@id/android:empty" 

android:layout_width="wrap_content" 

android:layout_height="fill_parent" 

android:gravity="center" 

android:padding="5dp" 

android:text="Loading more days..."/> 



</LinearLayout> 

 

然后记得在加到adapter前,把footview加到listview中去

 

View footerView = ((LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listfooter, null, false); 

this.getListView().addFooterView(footerView); 

this.setListAdapter(adapter); 

 

然后,listview的onscroll方法如下:

  • this.getListView().setOnScrollListener(new OnScrollListener(){        
    
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    
    }          
    
    public void onScroll(AbsListView view, int firstVisibleItem,   
    
    int visibleItemCount, int totalItemCount) {                  
    
    int lastInScreen = firstVisibleItem + visibleItemCount;                
    
    String last=Integer.toString(lastInScreen);   
    
    Log.d("show",last);   
    
    String total=Integer.toString(totalItemCount);   
    
    Log.d("total",total);              
    
    if((lastInScreen == totalItemCount) && !(loadingMore)){                    
    
    Thread thread =  new Thread(null, loadMoreListItems);   
    
    thread.start();   
    
    }   
    
    }   
    
    });         
    
    Thread thread =  new Thread(null, loadMoreListItems);   
    
    thread.start();  
     
  • 下面来分析下,其中,可以预先设置一个屏的listview能显示多少条记录,比如设置为5条,这里itemsPerPage=15,然后:

     

     int lastInScreen = firstVisibleItem + visibleItemCount;

     

    这里,获得每屏中最后一条数据的位置,比如一次先显示5条,则lastInScreen=5了。
  • if((lastInScreen == totalItemCount) && !(loadingMore)){ 
    
    Thread thread =  new Thread(null, loadMoreListItems); 
    
    thread.start(); 
    
    } 
     这里是判断,如果是滚动了滚动条,并且用户以及功能浏览完了一次屏幕所需要的数目(比如5个),则启用线程序loadMoreListItems去处理,加载另外的新的5个了。

    而如果没滚动,则第一次显示时,也要启用线程序loadMoreListItems去处理。下面看loadMoreListItems:
  • private Runnable loadMoreListItems = new Runnable() {              
    
    public void run() {   
    
    loadingMore = true;   
    
    myListItems = new ArrayList<String>();   
    
    //Simulate a delay, delete this on a production environment!
    
    try { Thread.sleep(1000);   
    
    } catch (InterruptedException e) {}   
    
    //Get 15 new listitems   
    
    for (int i = 0; i < itemsPerPage; i++) {          
    
    myListItems.add("Date: " + (d.get(Calendar.MONTH)+ 1) + "/" + d.get(Calendar.DATE) + "/" + d.get(Calendar.YEAR) );                                          
    
    d.add(Calendar.DATE, 1);      
    
    }        
    
    runOnUiThread(returnRes);            
    
    }   
    
    ;     
    
     
    在这个线程里,实际上就是用循环往listview中加日期,产生从当天时间起的若干个日期格式,然后调用runOnUiThread(returnRes);去更新UI主线程,注意 runOnUiThread是android提供的方法,可以帮助你在线程中执行UI更新操作。
    private Runnable returnRes = new Runnable() {   
    
    public void run() {   
    
    if(myListItems != null && myListItems.size() > 0){   
    
    for(int i=0;i<myListItems.size();i++)   
    
    adapter.add(myListItems.get(i));   
    
    }   
    
    adapter.notifyDataSetChanged();   
    
    loadingMore = false;   
    
    }   
    
    };  
    

     

       在更新主线程中,十分简单,只不过往adapter中去增加元素,并且notifyDataSetChanged通知listview起变化了,并设置loadingMore=false,因为已经加载完了一次了。

     

    Reference:  http://www.eoeandroid.com/thread-71019-1-1.html


        
    [2] 替动态添加的控件添加点击响应事件
        来源: 互联网  发布时间: 2014-02-18
    为动态添加的控件添加点击响应事件

    当一个控件是动态添加的时,在该控件的setOnClickListener函数中new一个线程,这个线程去启动一个handler,在handler中修改界面或操作。


        
    [3] 程序异常处理全局处理
        来源: 互联网  发布时间: 2014-02-18
    程序错误处理全局处理
    http://blog.csdn.net/liangguohuan/archive/2010/11/19/6022419.aspx

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3