listview动态加载数据

系统 1918 0

 

  效果图

<1>

当前listview里的原始数据


listview动态加载数据
 
<2>
当滑动到最低端时候,开始加载新数据,出现loading


listview动态加载数据
 
<3>
新数据加载后显示

listview动态加载数据
 

 

具体实现

写一个适配器,一般会自己继承,然后重新一些东西
 
public   class   MyAdapter   extends   ArrayAdapter<bean>{

       private   final   LayoutInflater   mInflater ;

      public   MyAdapter(Context context, List<bean> apps) {
          super (context, 0, apps);
          mInflater   = LayoutInflater. from (context);
    }
 
      @Override
      public   View getView( int   position, View convertView, ViewGroup parent) {
      bean bean =   this .getItem(position);
          if   (convertView ==   null ) {
            convertView =   mInflater .inflate(R.layout. item , parent,   false );
        }
        TextView data = (TextView) convertView.findViewById(R.id. text );
        data.setText(bean.getName());
          return   convertView;
    }
}
            
          
        
        
      
      
        
          
            
            
          
        
      
activity加载数据,新数据一般是当你第一次默认显示的数据已经完全显示,然后滚轮拖动到屏幕下端时候加载,也就是
firstVisibleItem + visibleItemCount = totalItemCount的时候,此时才启动线程开始加载数据。
 
public   class   LoadActivity   extends   Activity {
       private   ListView   lv   =   null ;
      ArrayList<bean>   beans   =   new   ArrayList<bean>();
      MyAdapter   adapter   =   null ;
       boolean   isRefresh   =   true ;
       boolean   isFirstRun   =   true ;
       private   bean   bean = null ;

       @ Override
       public   void   onCreate(Bundle savedInstanceState) {
             super .onCreate(savedInstanceState);
            setContentView(R.layout. refresh );
             lv   = (ListView) findViewById(R.id. listview );
             lv .setOnScrollListener( new   OnScrollListener() {

                   public   void   onScroll(AbsListView view,   int   firstVisibleItem,
                               int   visibleItemCount,   int   totalItemCount) {
                        Log. i ( "v" ,   ""   + visibleItemCount);
                        Log. i ( "f" ,   ""   + firstVisibleItem);
                        Log. i ( "t" ,   ""   + totalItemCount);
                         
                        //第一次进入时候,如果当前显示页面放不下第一次的所有数据,会分页显示
                        //就算滚轮到最低端,也不会加载的新的数据,只有当第一次数据显示完后才会刷新出现loading
                        //如果没有下面的判断,在你进入这个listview就会直接加载一次新数据,在这个例子里,比如你第一次加载的事40条数据,会变成45条
                         if   ( isFirstRun ) {
                               isFirstRun   =   false ;
                               return ;
                        }
                        
                         if   ((firstVisibleItem + visibleItemCount) == totalItemCount
                                    &&   isRefresh ) {
                               isRefresh   =   false ;
                             //loading条显示出来
                              findViewById(R.id. loadtext ).setVisibility(View. VISIBLE );
                               new   LoadThread().start();
                        }

                  }

                   public   void   onScrollStateChanged(AbsListView view,   int   scrollState) {
            });
             adapter   =   new   MyAdapter( this .getBaseContext(), getFirstBean());
             lv .setAdapter( adapter );

      }
     //第一次加载的数据
       private   ArrayList<bean> getFirstBean(){
             bean   = new   bean();
             for   ( int   i = 0; i < 20; i++) {
                   bean   =   new   bean();
                   bean .setName( "Json   "   + i +   "  号" );
                   beans .add( bean );
            }
             return   beans ;
      }     
      //需要加载的新数据
       private   void   refreshListView() {
             if   ( beans   ==   null   ||   adapter   ==   null ) {
                   return ;
            }
            bean bean =   null ;
             for   ( int   i = 0; i < 5; i++) {
                  bean =   new   bean();
                  bean.setName( "新数据:  "   + i);
                   beans .add(bean);
            }
      }

      Handler   _handler   =   new   Handler() {
             @ Override
             public   void   handleMessage(Message msg) {
                   switch   (msg. what ) {
                   case   1:
                         adapter .notifyDataSetChanged();
                        //当数据已经改变后loading条不显示出来
                        findViewById(R.id. loadtext ).setVisibility(View. INVISIBLE );
                         isRefresh   =   true ;
                         break ;
                   case   2:
                  }
            }
      };
     
       class   LoadThread   extends   Thread {

             @ Override
             public   void   run() {
                  refreshListView();
                   try   {
                         sleep (1000);
                  }   catch   (InterruptedException e) {
                        e.printStackTrace();
                  }
                    //传给handler处理
                   _handler .sendEmptyMessage(1);
            }
      }

}

listview动态加载数据


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论