SaluteWarmTinct
2015-06-08 06:25
采纳率: 86%
浏览 2.4k

Android如何实现上拉加载的问题

如题,我有在网上看到去监听 滑动的距离到达现在加载数据的底部时候 触发一个事件,
在这个事件里再加载一部分数据,但是这时候listview就会从头显示了,也就是比如一次
加载5个,触发一次又5个,这时候就从0开始显示了。这个该怎么解决呢?或者有没有更
合理的解决的方法,关于实现上拉加载的。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 胖虎 2015-06-09 10:07
    已采纳

    case MotionEvent.ACTION_UP:
    //当发生up事件时,如果达成条件可触发事件,即触发对应事件
    if(isFirstRow){

                     lp.topMargin=0;  
                     //调用获取刷新数据的接口方法getNewest();  
                 }else if(isLastRow){  
    
                     //调用获取更多数据的接口方法;  
    
                     page_index=page_index+1;
    

    initGoodsList(page_index,page_size,count);

                 }  
                 lovelv.setLayoutParams(lp);   
                 break;
            }
            return false;
        }
    

    你在要触发重新加载的地方不应该去用initGoodsList,
    因为这样重新调用了lovelv.setAdapter(lovelistSimpleAdapter);
    listview显示的位置就会回到0的位置。
    而取而代之是,你加载完数据之后,lovelistItem改变了,
    然后再去调用lovelistSimpleAdapter.notifydatachanged()来刷新

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • devmiao 2015-06-08 06:27
    评论
    解决 无用
    打赏 举报
  • 我叫wuqi 2015-06-08 14:51

    不要重新加载适配器。更新完数据后使用adpter.notifydatachanged()方法刷新listview

    评论
    解决 无用
    打赏 举报
  • SaluteWarmTinct 2015-06-09 07:09

    这里是初始化部分
    lovelistItem是Arraylist>;

     private void initGoodsList(int page_index,int page_size,int count) {
    
            lovelistItem=getGoodsByPage(page_index, page_size, count);
    
            fujin_lovelist_llLayout = (LinearLayout) findViewById(R.id.fujin_lovelist_ll);
            fujin_lovelist_llLayout.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    
            lovelv = (ListView) findViewById(R.id.fujin_lovelist_lv);
    
            SimpleAdapter lovelistSimpleAdapter = new SimpleAdapter(this,
                    lovelistItem, R.layout.activity_fujin_list, new String[] {
                            "bigimage", "goodname", "comment", "nowprice",
                            "oldprice" }, new int[] { R.id.fujin_list_img,
                            R.id.fujin_list_top_title, R.id.fujin_list_text,
                            R.id.fujin_list_red_money, R.id.fujin_list_old_money });
    
            lovelv.setAdapter(lovelistSimpleAdapter);
    
            lovelv.setOnTouchListener(new MyTouchListener());
            lovelv.setOnScrollListener(new MyScrollListener());  
    
            lovelv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    String goods_index = String.valueOf(arg2);
                    SharedPreferences settings = getSharedPreferences("GoodsXML",
                            Activity.MODE_PRIVATE);
                    SharedPreferences.Editor localEditor = settings.edit();
                    localEditor.putString("goods_index", goods_index);
                    localEditor.commit();
    
                    Intent intent = new Intent(FujinActivity.this,
                            GoodReviewsActivity.class);
                    startActivity(intent);
                }
            });
        }
    

    这里是当滑动到当前加载的底部时

      case MotionEvent.ACTION_UP:
                     //当发生up事件时,如果达成条件可触发事件,即触发对应事件
                     if(isFirstRow){  
    
                         lp.topMargin=0;  
                         //调用获取刷新数据的接口方法getNewest();  
                     }else if(isLastRow){  
    
                         //调用获取更多数据的接口方法;  
    
                         page_index=page_index+1;
                         initGoodsList(page_index,page_size,count);
    
                     }  
                     lovelv.setLayoutParams(lp);   
                     break;
                }
                return false;
            }
    
    评论
    解决 无用
    打赏 举报
  • 请叫我头头哥 2015-06-09 08:03

    使用adpter.notifydatachanged()方法刷新listview

    评论
    解决 无用
    打赏 举报
  • 仟微科技 2015-06-09 14:11

    可能是我一直以来的惯性,我认知的上拉加载是指加载更多(有人理解下拉刷新叫做上拉刷新。。。),不知道你的是不是?
    上拉加载更多的话,是有一个自定义的ListView来实现的,其实里面主要实现的是一些上拉加载更多和下拉刷新的一些具体修改。有这样一个自定义ListView,有需要给你贴给你。
    其实下拉加载更多我不建议让它自动加载出来,最好让用户自己去触发,很多用户是不愿意你自动帮他加载更多的,对于用户体验其实不是最好的。
    当然,只是建议,你如果需要的话,我可以吧自定义的那个ListView给你,你去研究下。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题