當前listview里的原始數據<2>當滑動到最低端時候,開始加載新數據,出現loading<3>新數據加載后顯示具體實現寫一個適配器,一般會自己繼承,然后重新一些東西publicclassMyAdapterextendsArrayAdapter{privatefinalLayoutInflatermInflater;publicMyAdapter(Contextcontext,Listapps){super(conte" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

listview動態加載數據

系統 2143 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條評論
主站蜘蛛池模板: 台山市| 铁岭县| 老河口市| 湖口县| 思茅市| 新营市| 蓬莱市| 岳阳市| 安陆市| 扎赉特旗| 盐城市| 叶城县| 荣昌县| 河北省| 郑州市| 屏东市| 邢台市| 西峡县| 开阳县| 运城市| 洛阳市| 宝兴县| 本溪| 额尔古纳市| 崇礼县| 南乐县| 庆元县| 上蔡县| 葫芦岛市| 福鼎市| 伊川县| 望都县| 凌海市| 阿勒泰市| 左权县| 固始县| 融水| 花莲市| 邵武市| 丰镇市| 赤水市|