2013-07-29 2 views
0

그래서 목록 뷰가 있고 외부 데이터베이스에서 데이터를 가져옵니다. 처음으로 20 개의 항목을 갖고 싶습니다. 사용자가 아래로 스크롤하면 다른 20 개의 항목이로드됩니다. 난 또 20 목록에 하나 notifyDataSetChanged() .. 기능은 잘 동작을 추가 할 수 있도록로드 기능에 리스트 뷰가로드 기능을 추가로 구현할 때 올바르게 작동하지 않습니다.

class ItemAdapter extends BaseAdapter { 
     private ArrayList<Item> objects; 
     private class ViewHolder { 
      public TextView text_tt; 

     } 

     @Override 
     public int getCount() { 
      return SIZE; 
      //return 9; 
     } 

     @Override 
     public Object getItem(int position) { 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

@Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      View v = convertView; 
      final ViewHolder viewHolder; 
      if (v == null) { 
      LayoutInflater inflater = (LayoutInflater) getActivity().getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = inflater.inflate(R.layout.list_item, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text_tt = (TextView) v.findViewById(R.id.toptext); 
      } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
      } 

      if(position==getCount()-1){ 
       LoadMore(); //asynctask - load other 20 

      } 
      return v; 
     } 
    } 

내가 미리 읽기 JSON 데이터를 파싱하지만 부작용 가지고 약 50 % 아이템 클릭에 대한 인식 시간. 아래로 스크롤하여 다음 20 개 항목을 받지만 항목을 클릭 할 수는 없습니다. 하지만 예를 들어 활동을 변경하고 목록보기로 돌아 가면 작동합니다. 왜? 감사합니다.

+0

더 많은 항목을로드 할 때를 감지하려면 listview 메소드를 사용해야합니다. listview의 스크롤 리스너를 추가합니다. 마지막 스크롤 위치에 도달했는지 확인한 다음 LoadMore()를 호출하십시오. getView에서 LoadMore를 호출하지 마십시오. 나는 listview의 플라이급 패턴에 대해 읽어야한다고 생각한다. 각 데이터에 대해 목록 뷰에 대해 새 항목이 작성되었다고 생각하고 있습니다. 위의 코드는 확실히 성가신 코드입니다. –

+0

조언을 주셔서 감사합니다. 저는 vikram이 지금까지 작동하는 예제를 보여준 것 같아요. 나는 stackoverflow에 내 방법을 보았지만, 나는 이것이 나쁜 접근 이었다는 것을 알지 못했다. –

답변

2

ListViewOnScrollListener을 설정할 수 있습니다. 이 조건이 만족

firstVisible + visibleItemCount = totalItemCount 

경우, 데이터베이스에서 더 많은 항목을로드 항목의 업데이트 된 목록에 어댑터를 초기화 할 수 있습니다 다음 onScroll() 방법, 있는지 확인하세요.

listView.setOnScrollListener(new OnScrollListener() { 

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

     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      if ((firstVisibleItem + visibleItemCount) == totalItemCount) { 

       // add 20 more items to the list and reinitialize the adapter 

      } 
     } 
    }); 
} 
+0

작동하는 것처럼 보입니다. 나는 그것을 더 시험 할 것이지만 이것은 좋은 접근법이다. 고마워! –