2012-06-04 23 views
5

Tôi có chức năng tìm kiếm trong dự án của mình. Trong searchable.xml, tôi muốn giới hạn tìm kiếm chỉ khi người dùng gõ ít nhất 3 ký tự.Android: saerchable.xml và tham số searchSuggestThreshold

Điều này có thể được thực hiện với android: searchSuggestThreshold = "3" nhưng trong trường hợp của tôi, không có gì xảy ra, người dùng vẫn có thể thực hiện tìm kiếm khi anh ấy nhập hoặc nhiều ký tự.

Đây là searchable.xml tôi:

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/Label" 
    android:hint="@string/Hint" 
    android:searchSuggestThreshold="3" 
    android:includeInGlobalSearch="true"/> 

Đây là 2 activityes tìm kiếm từ Manifest

<activity android:name=".Search" 
     android:configChanges="orientation|keyboardHidden"> 
      <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" 
       android:resource="@xml/searchable"/> 
     </activity> 

     <activity android:name=".SearchInterface" 
     android:configChanges="orientation|keyboardHidden"> 
     <meta-data android:name="android.app.default_searchable" 
       android:value=".Search" /> 
     </activity> 

Trả lời

5

Trước khi trả lời câu hỏi của bạn có một điều bạn phải thay đổi trong AndroidManifest.

<meta-data android:name="android.app.default_searchable" 
       android:value=".Search" /> 

phải giữa <application></application> thẻ nhưng không phải bên <activity></activity> người. Vì nó tuyên bố hoạt động mặc định để gọi khi mục đích Tìm kiếm được kích hoạt. Sau đó, hãy thử xem android: searchSuggestThreshold có hoạt động không. Những gì bạn có thể làm như một cách giải quyết là trong SearchHelper bạn đang sử dụng (lớp quản lý truy vấn sql) bạn nhận được đầu vào tìm kiếm từ người dùng làm tham số để bạn có thể đặt đơn giản nếu. Như thế này:

public static Cursor getAutoCompleteCursor(String s) { 
    Cursor cursor; 
    if (s != null && s.length() > 2) 
     cursor = searchAutoComplete(s); 
    else 
     cursor = null; 
    return cursor; 
} 

Tôi hy vọng bạn hiểu ý tôi là gì. Mọi nghi ngờ chỉ cho tôi biết!

+0

Xin chào @rallat, cảm ơn bạn đã trả lời. Tôi đã thử giải pháp đầu tiên và không có gì thay đổi. Nếu bạn xem qua bài viết này: http://developer.android.com/guide/topics/search/search-dialog.html siêu dữ liệu nằm trong thẻ hoạt động chứ không phải trong thẻ ứng dụng. –

+0

cho giải pháp thứ hai, tôi nghĩ rằng điều này là không thực sự có thể bởi vì khi người dùng gõ nút tìm kiếm, hoạt động tìm kiếm bị đóng và một hoạt động mới được mở ra nơi tôi đang làm tất cả các querry và hiển thị kết quả. Vì vậy, tôi cần phải kiểm tra chiều dài đầu vào khi người dùng nhấp vào nút tìm kiếm –

+0

ghi siêu dữ liệu giữa các thẻ ứng dụng có nghĩa là hoạt động có thể tìm kiếm có thể gọi tìm kiếm từ toàn bộ ứng dụng. http://developer.android.com/resources/samples/SearchableDictionary/index.html – rallat

Các vấn đề liên quan