2014-09-17 5 views
2

나는 바닥 글보기에 문제가있다. 동적으로 항목을로드하는 목록보기를 만듭니다. 바닥 글보기에서 단추를 클릭했을 때.안드로이드리스트 뷰 푸터보기

protected void addFooterView() { 
     removeFooterView(); 
     searchListView.post(new Runnable() { 
      @Override 
      public void run() { 
       ListAdapter adapter = searchListView.getAdapter(); 
       searchListView.setAdapter(null); 
       searchListView.addFooterView(footerView); 
       searchListView.setAdapter(adapter); 
      } 
     }); 
    } 

    protected void removeFooterView() { 
     searchListView.post(new Runnable() { 
      @Override 
      public void run() { 
       if (searchListView.getFooterViewsCount() > 0) { 
        ListAdapter adapter = searchListView.getAdapter(); 
        searchListView.setAdapter(null); 

        while (searchListView.getFooterViewsCount() > 0) { 
         searchListView.removeFooterView(footerView); 
        } 

        searchListView.setAdapter(adapter); 
       } 
      } 
     }); 
    } 

팽창 전망 :이 호출이 다음 방법을 필요로 할 때 목록보기로 부착 바닥 글

private void declareViewAndButton(View view) { 
     this.searchListView = (ListView) view.findViewById(R.id.searchListView); 
     this.footerView = LayoutInflater.from(getActivity()).inflate(R.layout.search_list_view_footer, searchListView, false); 
    } 

그래서, 바닥 글보기 표시 위치 목록보기의 바닥을 갈 때. 그리고 스크롤하여 되돌아 가고, 바닥 글보기 높이 크기가 동적으로 변경됩니다. 그것을 고치는 방법 ?? 또는 문제의 원인을 어디에서 찾을 수 있는지 말해주십시오. 미안해, 내 영어로.

답변

1

KITKAT API에서 시작하면 바닥 글과 머리말 방법을 어디에서나 호출 할 수 있습니다. 설정된 어댑터는 중요하지 않습니다. 공식 문서에서 말하는 것처럼 아답/제거 바닥 글 및 헤더보기는 어댑터를 설정하기 전에 호출해야합니다. 그러나 이것은 거의 사실입니다. 필요한 경우 바닥 글을 관리해야하지만 헤더는 필요하지 않습니다. 일부 장치 바닥 글 작업 성공에 다른 정상적인 작업 후 단일 리셋 어댑터가 필요합니다. 나도 몰라, 이것은 버그 또는 기능입니다!

그래서 실험을 마친 후 바닥 글보기 방법을 추가하고 제거했습니다. 우수한 작품 :

protected void addFooterView() { 
     removeFooterView(); 
     searchListView.post(new Runnable() { 
      @Override 
      public void run() { 
       searchListView.addFooterView(footerView); 

       if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
        int lastViewedPosition = searchListView.getFirstVisiblePosition(); 
        View v = searchListView.getChildAt(0); 
        int topOffset = (v == null) ? 0 : v.getTop(); 

        searchListView.setAdapter(searchAdapter); 
        searchListView.setSelectionFromTop(lastViewedPosition, topOffset); 
       } 
      } 
     }); 
    } 

    protected void removeFooterView() { 
     searchListView.post(new Runnable() { 
      @Override 
      public void run() { 
       while (searchListView.getFooterViewsCount() > 0) { 
        searchListView.removeFooterView(footerView); 
       } 
      } 
     }); 
    } 

19,16,10 api에서 테스트되었습니다.