0

안녕하세요, SearchView 위젯을 통해 내 앱에서 사용자를 검색하고 싶습니다. SearchWidget이 활성 일 때 XML 레이아웃 인 ViewPager 위의 ListView에 제안 된 사용자 이름을 표시하고 싶습니다. 나는 그리고 코드에서 내가 사용자를 보여 ListView을 visibledAndroid show SearchView result 위의 ViewView ViewPager

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" >  
<ListView 
    android:id="@+id/searched_friends_list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:divider="@color/list_divider" 
    android:dividerHeight="1dp" 
    android:layout_marginLeft="15dp" 
    android:layout_marginRight="15dp" 
    android:visibility="gone" 
    android:listSelector="@drawable/list_row_selector" />  
<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</android.support.v4.view.ViewPager> 

XML 다음 사용. 나는 그것이 출력을 enter image description here

을 다음 보여줍니다하지만 ViewPagerListView을 원하는 코드를

@Override 
public boolean onQueryTextChange(String newText) { 
    friendListView.setVisibility(View.VISIBLE); 
    viewPager.setVisibility(View.GONE); 
    if (TextUtils.isEmpty(newText)) { 
     friendListView.clearTextFilter(); 
    } else { 
     friendListView.setFilterText(newText.toString()); 
    } 
    return true; 
} 

에 따라 추가 할 때

@Override 
public boolean onQueryTextChange(String newText) { 
    friendListView.setVisibility(View.VISIBLE); 
    if (TextUtils.isEmpty(newText)) { 
     friendListView.clearTextFilter(); 
    } else { 
     friendListView.setFilterText(newText.toString()); 
    } 
    return true; 
} 

ListView enter image description here

을 보여하지만,하지 않습니다. 미리 감사드립니다.

답변

0

ListView에서 사용자가 searchView에서 제안 할 결과를 실시간으로 표시하려면 - 어댑터에서 필터를 사용하십시오.

어댑터에 추가

ArrayList<full_data> adapterDataList = new ArrayList<full_data>(); 
ArrayList<filtered_data> mFilteredDataList = new ArrayList<filtered_data>(listOR); 
Filter mFilter = new Filter() { 
@Override 
protected FilterResults performFiltering(CharSequence searchTerm) { 
Locale locale = Locale.getDefault(); 
FilterResults results = new FilterResults(); 
if ((searchTerm null) || (searchTerm.length() 0)) { 
ArrayList<String> searchList = new ArrayList<String>(adapterDataList); 
results.values = searchList; 
results.count = searchList.size(); 
} else { 
final String searchTermString = searchTerm.toString().toLowerCase(locale); 
final String[] words = searchTermString.split(" "); 
final int wordCount = words.length; 
final ArrayList<String> newValues = new ArrayList<String>(); 

for (final String value : adapterDataList) { 
        if (value == null) { 
         continue; 
        } 
        final String valueText = value.toLowerCase(locale); 
for (int k = 0; k < wordCount; k++) { 
         if (valueText.contains(words[k])) { 
          newValues.add(value); 
          break; 
         } 
        } 
       } 
       results.values = newValues; 
       results.count = newValues.size(); 
      } 
      return results; 
     } 
@Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      mFilteredDataList = (ArrayList&lt;String&gt;)results.values; 
      notifyDataSetChanged(); 
     } 
    }; 
public Filter getFilter(){ return mFilter; } 

to SearchView's TextChangedListener: 
@Override 
public void afterTextChanged(Editable searchText) { 
mAdapter.getFilter().filter(searchText); 
} 

나는 그것이 잘 작동한다고 생각합니다.

+0

답해 주셔서 감사합니다. 나는'protected FilterResults performFiltering (CharSequence constraint) {'을 추가하고 데이터를 필터링 할 수 있습니다. 하지만 내 문제는'ViewPager' 위에'ListView'를 표시하는 것입니다. – user3384985

+0

@ user3384985 여기에서 ViewPager를 숨 깁니다 :'viewPager.setVisibility (View.GONE); ' 레이아웃을 삭제하고 레이아웃을 RelativeLayout에서 LinearLayout으로 변경하십시오. 그 후 모두 괜찮을 것입니다. – QArea