2017-12-21 3 views
1

ListView과 함께 제공되는 getCount() 함수와 관련된 문제가 발생합니다. 나는 에 표시되는 행 수를 onQueryTextChange() 메서드로 필터링 할 때 SearchView이 제공하는 행 수를 얻으려고합니다. 불행히도 숫자는 항상 하나의 반복으로 꺼집니다.. 예를 들어, ListView의 4 개 항목으로 시작하여 ListView에 1 개의 항목 만 포함되도록 필터하면 getCount() 함수는 1을 원한다고해도 4를 반환합니다. 그 후에 바로 필터를 다시 변경하면 1을 얻으십시오. onQueryTextChange() 메서드의 ListView을 필터링 할 때 적절한 getCount() 번호가 부여되도록하려면 어떻게해야합니까?ListView getCount() 메서드를 한 번 반복 수행하여

@Override 
public boolean onQueryTextChange(String newText) { 

    sizeOfList = listView.getAdapter().getCount(); //changes based on the number of items in the listview....so changes when filtered 
    Toast.makeText(getActivity(), String.valueOf(sizeOfList), Toast.LENGTH_SHORT).show(); 

    if (TextUtils.isEmpty(newText)){ 
     listView.clearTextFilter(); 

     for (int i = 0; i < actualposList.size(); i++){ 
      listView.setItemChecked(actualposList.get(i), true); 
      Log.d("qqqq", String.valueOf(actualposList.get(i))); 
     } 

    } else { 

     listView.setFilterText(newText); 

     if (!actualposList.isEmpty()){ 
      for (int i = 0; i < list.size(); i++){ 
       //listView.setItemChecked(i, false); 
      } 
     } 
    } 

    return true; 
} 
+0

당신이 actualposList.size를 (사용하지 못할 TRY) 대신 getCount의? – ABDevelopers

+0

아쉽게도 actualposList는 내가 만든 대화 상자에서 선택된 항목의 위치를 ​​유지합니다. onQueryTextChange가 호출 될 때 listview에 나타나는 항목의 수가 필요합니다. – topgun741

+0

시도해 볼 수 있습니다 : Method1 - 필터를 사용하는 대신 어댑터 내부에서 공용 메서드를 사용하십시오. Method2 - 어댑터와 필터의 publishResults()에 인터페이스를 만들고, activity/fragment를 업데이트하십시오. [http://programandroidlistview.blogspot.com/]에서 배열 어댑터에서 샘플을 볼 수 있습니다. 희망 그 도움! –

답변

0

clearFilterText 및 setFilterText는 어떤 작업을 수행 할 수 있습니까? 그들은 당신이 변경 사항이 어댑터

+0

동일한 대화 상자에있는 listView를 필터링하기 위해 대화 상자 내에서 searchView를 사용하고 있습니다. 그래서'clearFilterText()'는 listView에있는 아이템의 전체리스트를 보여주고'setFilterText (newText)'는 전달 된 newText를 따르는 아이템만을 listView에 보여줍니다. – topgun741

0

에 반영되도록 adapter.notifyDataSetChanged를 호출 할 필요가 어떤 방식으로 목록을 수정하는 경우이

@Override 
public boolean onQueryTextChange(String newText) { 
    if (TextUtils.isEmpty(newText)) { 
     listView.clearTextFilter(); 

     for (int i = 0; i < actualposList.size(); i++) { 
      listView.setItemChecked(actualposList.get(i), true); 
      Log.d("qqqq", String.valueOf(actualposList.get(i))); 
     } 

    } else { 

     listView.setFilterText(newText); 

     if (!actualposList.isEmpty()) { 
      for (int i = 0; i < list.size(); i++) { 
       //listView.setItemChecked(i, false); 
      } 
     } 
    } 
    sizeOfList = listView.getAdapter().getCount(); //changes based on the number of items in the listview....so changes when filtered 
    Toast.makeText(getActivity(), String.valueOf(sizeOfList), Toast.LENGTH_SHORT).show(); 


    return true; 
} 
+0

나는 이것을 시도하고 같은 결과가 불행히도 :( – topgun741

관련 문제