2012-04-26 76 views
1

预期的输出是数据应该加载一次,然后为每个后续滚动。但相反,它一次加载列表视图中的所有数据。onScroll实现无限滚动

public class ViewPage extends ListActivity{ 

ListView lv; 
ListAdapter ld; 
int size=3; 

ArrayList<String> filename = new ArrayList<String>(); 
Cursor contactcursor; 
ArrayAdapter<String> arr_ad; 
int contact_column_index; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.mylist); 




    String[] proj = { ContactsContract.Contacts.DISPLAY_NAME }; 
    contactcursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, proj, null, null, null); 
    contact_column_index = contactcursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME); 
    lv = (ListView)findViewById(android.R.id.list); 
    contactcursor.moveToFirst(); 
     for(int i=0;i<size;i++) 
     { 

      filename.add(contactcursor.getString(contact_column_index)); 
      if(!contactcursor.moveToNext()) 
       break; 
     } 

     arr_ad = new ArrayAdapter<String>(ViewPage.this, android.R.layout.simple_list_item_1, filename); 
     setListAdapter(arr_ad); 


     lv.setOnScrollListener(new EndlessScrollListener()); 
} 

public class EndlessScrollListener implements OnScrollListener { 

private int visibleThreshold = size; 
private int currentPage = 0; 
private int previousTotal = 0; 
private boolean loading = true; 

public EndlessScrollListener() 
{ 

} 

public EndlessScrollListener(int visibleThreshold) 
{ 
    this.visibleThreshold = visibleThreshold; 
} 

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, 
     int visibleItemCount, int totalItemCount) { 
    // TODO Auto-generated method stub 



    /*Runnable action = new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     } 
    }; 
    runOnUiThread(action);*/ 

    Toast.makeText(ViewPage.this, "In" , 1).show(); 
    if (loading) 
    { 
     if (totalItemCount > previousTotal) 
     { 
      loading = false; 
      previousTotal = totalItemCount; 
      currentPage++; 
     } 
    } 
    if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) 
    { 


      for(int i=0;i<size;i++) 
      { 

       if(!contactcursor.moveToNext()) 
        break; 


       filename.add(contactcursor.getString(contact_column_index)); 

      } 

      arr_ad.notifyDataSetChanged(); 

      loading = true; 
      Toast.makeText(ViewPage.this,totalItemCount+" "+visibleItemCount+" "+firstVisibleItem+" "+visibleThreshold+" ", 1).show(); 
    } 
} 

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) { 
    // TODO Auto-generated method stub 

} 

} 
} 

在endlessscrolllistener类运行和负载的完整数据甚至没有滚动onscroll方法正在做。提前Thanx。

回答

0

onScroll被调用了很多,执行该逻辑的同时滚动在我看来相当昂贵。

我实现了在我的适配器中添加一个简单的逻辑的目标,请查看answer我刚才给出的。