2013-08-08 2 views

답변

2

다음 단계를 수행하여 ListView의보기로드를 지연시킬 수 있습니다.

먼저, ListView Object 및 YOUR_COSTOM_ADAPTER_OBJECT 클래스 변수를 만들어야합니다. 다음, 당신의 ListView에 대한 onScroll 리스너를 설정

당신의 ListView의 onScroll 리스너에서 스크롤 속도를 얻기 :
이 onScroll 리스너에서 스크롤 속도를 확인하고 속도가 빠른 얻을 때, 이미지를로드하지 어댑터를 말한다.

예제 코드 :

class YourClass extends Activity 
{ 
YOUR_CUSTOM_LISTVIEW_ADAPTER adapter; 
ListView YOUR_LISTVIEW; 
ArrayList<YOUR_DATA_TYPE> listViewData; 

onCreate(...){ 
..... 
..... 
//ListView data Initialization 
listViewData = new ArrayList<YOUR_DATA_TYPE>(); 
listViewData.clear(); 
YOUR_LISTVIEW = (ListView)findViewById(R.id.YOUR_LISTVIEW_ID); 
//adapter Initialization 
adapter = new YOUR_CUSTOM_LISTVIEW_ADAPTER(....); 
YOUR_LISTVIEW.setAdapter(adapter); 
} 

private OnScrollListener onScrollListener = new OnScrollListener() { 

private int previousFirstVisibleItem = 0; 
private long previousEventTime = 0; 
private double speed = 0; 

@Override 
public void onScroll(HtcAbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
{ 
    if (previousFirstVisibleItem != firstVisibleItem) 
    { 
     long currTime = System.currentTimeMillis(); 
     long timeToScrollOneElement = currTime - previousEventTime; 
     speed = ((double)1/timeToScrollOneElement)*1000; 

     previousFirstVisibleItem = firstVisibleItem; 
     previousEventTime = currTime; 

     Log.d("DBG", "Speed: " +speed + " elements/second"); 

     //Tell adapter to not load images if it has reached a specific speed 
     if(speed>YOUR_DESIRED_VALUE) 
     { 
      doNotLoadImagesInListView(); 
     } 
     else 
     { 
      loadImagesInListView(); 
     } 
    } 
} 

@Override 
public void onScrollStateChanged(HtcAbsListView view, int scrollState) 
{ 
} 
}; 

void doNotLoadImagesInListView() 
{ 
    adapter.isScrollFast = true; 
    adapter.notifyDataSetChanged(); 
    YOUR_LISTVIEW.setAdapter(adapter); 
} 

void loadImagesInListView() 
{ 
    adapter.isScrollFast = false; 
    adapter.notifyDataSetChanged(); 
    YOUR_LISTVIEW.setAdapter(adapter); 
} 


} 


그에 따라 변화를 확인하기 위해 사용자 정의 목록 어댑터를 구성

public class yourCustomAdapter extends BaseAdapter 
{ 
    public Boolean isScrollFast; 

public yourCustomAdapter(..... , ....., Boolean isScrollFast) 
{ 
    .... 
    this.isScrollFast = isScrollFast; 
    ..... 
} 

@Override 
public int getCount() 
{ 
    ..... 
} 

@Override 
public Object getItem(int position) 
{ 
    ..... 
} 

@Override 
public long getItemId(int position) 
{ 
    ..... 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ....... 
    if(isScrollFast==true) 
    { 
     //Don't Load Images 
    } 
    else 
    { 
     //Load Images normally 
    } 

    return vi; 
} 
} 

나는이 당신을 위해 작동 바랍니다.

관련 문제