Android рдЦреЛрдЬ рд╕рдВрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рднрд╛рдЧ 3 - рдХрд╕реНрдЯрдо рд╕реБрдЭрд╛рд╡

рдЫрд╡рд┐



рдпрд╣ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд░реНрдЪ рдбрд╛рдпрд▓реЙрдЧ (рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рд╣реИрдВ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рд╣реИред рдЗрд╕рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдбрд╛рдпрд▓реЙрдЧ рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕рд░реНрдЪ рд╣рд┐рдВрдЯ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП, рд╕рд╛рде рд╣реА рд╕рд┐рд╕реНрдЯрдо рдХреНрд╡рд┐рдХ рд╕рд░реНрдЪ рдмреЙрдХреНрд╕ (QSB) рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЦреЛрдЬ рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХреНрдпреВрдПрд╕рдмреА рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рдУрдПрд╕ рдореЗрдВ рд▓рдЧрднрдЧ рдХрд╣реАрдВ рд╕реЗ рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред





рд╕рд┐рджреНрдзрд╛рдВрдд



рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЛрдЬ рд╕рдВрдХреЗрдд рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдЗрд░рд╛рджреЗ рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╡рд╛рдж рдореЗрдВ рдЦреЛрдЬ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЦреЛрдЬ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реАрдШреНрд░рддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЙрдЪрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рд╕рдВрд╡рд╛рдж рдмрдирд╛рдирд╛, рдпрд╛ рдХреЙрд▓рд┐рдВрдЧ рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрджрд┐ред

рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЗрд░рд╛рджреЗ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдЖрд░рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рдлрд┐рд░ рд╕реЗ, рд╣рдореЗрдВ рдбрд╛рдпрд▓реЙрдЧ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд░реНрдЪ рдореИрдиреЗрдЬрд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдо рд╕рднреА рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди xml рдлрд╝рд╛рдЗрд▓ рд╕рдмрдорд┐рдЯ рдХрд░реЗред



рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдФрд░ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдЬрдм рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдХрд╛ рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рд╕рдВрдХреЗрдд рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЕрдкрдирд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред
  2. рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдЦреЛрдЬ рдХреНрд╡реЗрд░реА рдХреЗ рдкрд╛рда рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХреЗрдд рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдХрд░реНрд╕рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  3. рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рдХрд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ


рд╕рдВрдХреЗрддреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:



рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдХрд┐ рднрд╛рдЧ 1 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА) рддрд╛рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВ, рдФрд░, рддрдВрддреНрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреВрд▓рдЯрд┐рдк рдЪреБрдирдиреЗ рдкрд░, рд╣рдо рдПрдХ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╣реЗрдВрдЧреЗ, рдЬреЛ рдЕрдиреБрд░реЛрдз рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреАред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:





рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрджрд▓реЗрдВ



рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдбрд╛рдпрд▓реЙрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (рд░реЗрд╕ / xml / searchable.xml) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡рд╛рдЬ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдбрд╛рдпрдирд╛рдорд┐рдХ рд╕рдВрдХреЗрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛: android: searchSuggestAuthority рдлрд╝рд╛рдЗрд▓ рдореЗрдВред рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ: searchMode = "queryRewriteFromText", рдЗрд╕рдХрд╛ рдорд╛рди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбрд╛рдпрд▓реЙрдЧ рдореЗрдВ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░реИрдХрдмреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд╣рдо рдЪрдпрди рдСрдкрд░реЗрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЯреВрд▓рдЯрд┐рдк рдХреЗ рдЪреБрдиреЗ рдЬрд╛рдиреЗ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдЗрд░рд╛рджреЗ рдХрд╛ рдкреНрд░рдХрд╛рд░, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╡рд╛рдж рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкрд╛рддреНрд░реЛрдВ рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ред



рдлрд╝рд╛рдЗрд▓ рд░реЗрд╕ / xml / searchable.xml

<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" android:searchSettingsDescription="@string/settings_description" android:searchMode="queryRewriteFromText" android:includeInGlobalSearch="true" android:searchSuggestAuthority="com.example.search.SuggestionProvider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestIntentData="content://com.example.search.SuggestionProvider/records" android:searchSuggestThreshold="1" android:searchSuggestSelection=" ?"> </searchable>
      
      







рдПрдХ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдПрдБ



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдХрдВрдЯреЗрдВрдЯ рдкреНрд░рджрд╛рддрд╛ рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХреЗрддреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓рдо рдЪреБрдиреЗ рдЧрдП рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреНрд╡реЗрд░реА () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреНрд╡реЗрд░реА рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣рд░ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╡рд╛рдж рдореЗрдВ рдПрдХ рдирдпрд╛ рдЪрд░рд┐рддреНрд░ рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреНрд╡реЗрд░реА () рдкрджреНрдзрддрд┐ рдХреЛ рдХреНрд╡реЗрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдХрд░реНрд╕рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдХреЛрдб рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦреЗрдВред

рдЕрдиреБрд░реЛрдз рдкрд╛рда рд╕реНрд╡рдпрдВ URI рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЖрдкрдХреЛ рдмрд╕ рдорд╛рдирдХ getLastPathSegment () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдПрдХ рд╕рдВрдХреЗрдд рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛



рдЬрдм рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдХрд░реНрд╕рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдо рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рджреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИрдВ: _ID рдкреНрд░рддреНрдпреЗрдХ рдЯреВрд▓рдЯрд┐рдк рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ, рдФрд░ SUGGEST_COLUMN_TEXT_1 рдЯреВрд▓рдЯрд┐рдк рдкрд╛рда рд╣реИред

рдХрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдо рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SUGGEST_COLUMN_ICON_1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЯреВрд▓рдЯрд┐рдк рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЖрдЗрдХрди (рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрд░реНрдХ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЖрд╢рдп рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛



рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдпреВрдЖрд░рдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЯреВрд▓рдЯрд┐рдк рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдПрдХ рдЕрд▓рдЧ рдХреЙрд▓рдо SUGGEST_COLUMN_INTENT_DATA рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЖрдк GetData () рдпрд╛ getDataString () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЯреЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (res / xml / searchable.xml) рдореЗрдВ рд╕рднреА рдЗрд░рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдлрд┐рд░ SUGGEST_COLUMN_INTUM_DATA_ID рдХреЙрд▓рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ URI рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрд░рд╛рджреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВред

рд╣рдо рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдореИрдВрдиреЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрд▓рдо рдирд╣реАрдВ рдмрдирд╛рдП рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк SUGGEST_COLUMN_INTENT_DATA_ID рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдореИрдкрд┐рдВрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ SQLite рдореЗрдВ рдЦреЗрд▓ рд╣рд┐рдд рдХреЗ рд▓рд┐рдП, FTS3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЕрд░реНрдерд╛рдд , рдореБрдЭреЗ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рдмрдирд╛рдиреА рдереА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рд╕реНрддрдВрднреЛрдВ (рдмрд╛рдзрд╛рдУрдВ) рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ PRIMARY KEY рдпрд╛ рдкреВрд░реНрдг / рдирд╣реАрдВ NULLред рд▓реЗрдХрд┐рди рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрдВрдХреНрддрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореИрдкрд┐рдВрдЧ рдХреЛ рдЗрд╕рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрд░рд╛рджреЗ рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд╣реЛрдВрдЧреЗ: "/" рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐ рдХреА рдкрдВрдХреНрддрд┐ рдХреЛ URI рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред



рд╕реВрдЪрдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░реЗрд╕ / рд▓реЗрдЖрдЙрдЯ / record_activity.xml рдореЗрдВ рд╣реИред рд╡рд╣ рд╕рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬреЛ рдЗрдВрдЯреЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдПрдХ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХрд░реНрд╕рд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ, рдФрд░ рдПрдХ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред



рдлрд╝рд╛рдЗрд▓ рд░реЗрд╕ / рд▓реЗрдЖрдЙрдЯ / record_activity.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp"> <TextView android:id="@+id/record_header" android:textSize="25dp" android:textColor="?android:textColorPrimary" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
      
      







рдЕрдм рд╣рдо рдкреНрд░рдХрдЯ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдирдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗ, рд╕рд╛рде рд╣реА, рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗред



AndroidManifest.xml рдлрд╝рд╛рдЗрд▓

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.search" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Main" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <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=".RecordActivity" android:theme="@android:style/Theme.NoTitleBar" /> <provider android:name=".SuggestionProvider" android:authorities="com.example.search.SuggestionProvider" /> <meta-data android:name="android.app.default_searchable" android:value=".Main" /> </application> <uses-sdk android:minSdkVersion="5" /> </manifest>
      
      





рдЦреЛрдЬ рдХреЗ рдкреНрд░рднрд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрд░рд╛рджреЗ рдХреЛ рд░реЛрдХрдирд╛



рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрд░рд╛рджреЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯреЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдбрдЕрдХреНрдЯрд┐рд╡рд┐рдЯреА рдЗрдВрдЯреЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ URI + "/" + рдЯреВрд▓рдЯрд┐рдк рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред



рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдмреЙрдХреНрд╕ рдПрдХреАрдХрд░рдг



рдХрд╕реНрдЯрдо рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдЦреЛрдЬ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, searchable.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ:

  1. рдПрдВрдбреНрд░реЙрдЗрдб: рдЗрдирдЧреНрд▓реЛрдмрд▓рд╕рд░реНрдЪ = "рд╕рддреНрдп" рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреВрдПрд╕рдмреА рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИред
  2. android: searchSettingsDescription = "@ string / settings_description" - рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдмреЙрдХреНрд╕ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпреЗ рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯрд┐рдВрдЧреНрд╕-> рд╕рд░реНрдЪ рдореЗрдВ рд╣реИрдВред



рдпреЗ рд╡рд┐рдХрд▓реНрдк Android 1.6 рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк QSB рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред



рд╕реНрд░реЛрдд рдХреЛрдб



рдореИрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред Main.java - рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, RecordActivity.java - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╢рдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред SuggestionProvider.java рдПрдХ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рд╣реИ рдЬреЛ рдЦреЛрдЬ рдкреНрд░рдмрдВрдзрдХ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред RecordsDbHelper.java - рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ, рдЙрд╕реЗ рднрд░рдиреЗ, рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рджрд░реНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ "рдорд┐рд▓рд╛рди" рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред



Main.java рдлрд╝рд╛рдЗрд▓

 package com.example.search; import android.app.ListActivity; import android.app.SearchManager; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class Main extends ListActivity { private EditText text; private Button add; private RecordsDbHelper mDbHelper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mDbHelper = new RecordsDbHelper(this); Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { //     String query = intent.getStringExtra(SearchManager.QUERY); //  showResults(query); } else if (Intent.ACTION_VIEW.equals(intent.getAction())){ // Intent   RecordActivity Intent recordIntent = new Intent(this, RecordActivity.class); recordIntent.setData(intent.getData()); startActivity(recordIntent); finish(); } add = (Button) findViewById(R.id.add); text = (EditText) findViewById(R.id.text); add.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { String data = text.getText().toString(); if (!data.equals("")) { saveTask(data); text.setText(""); } } }); } private void saveTask(String data) { mDbHelper.createRecord(data); } private void showResults(String query) { //  -    Cursor cursor = managedQuery(SuggestionProvider.CONTENT_URI, null, null, new String[] {query}, null); if (cursor == null) { Toast.makeText(this, "There are no results", Toast.LENGTH_SHORT).show(); } else { //  String[] from = new String[] { RecordsDbHelper.KEY_DATA }; int[] to = new int[] { R.id.text1 }; SimpleCursorAdapter records = new SimpleCursorAdapter(this, R.layout.record, cursor, from, to); getListView().setAdapter(records); } } //     (  res/menu/main_menu.xml) public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search_record: onSearchRequested(); return true; default: return super.onOptionsItemSelected(item); } } }
      
      







рдлрд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдбрдЕрдХреНрдЯрд┐рд╡рд┐рдЯреА.рдЬрд╛рд╡рд╛

 package com.example.search; import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.TextView; public class RecordActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.record_activity); // URI    Intent     - Uri uri = getIntent().getData(); Cursor cursor = managedQuery(uri, null, null, null, null); if (cursor == null) { finish(); } else { //     cursor.moveToFirst(); TextView record = (TextView) findViewById(R.id.record_header); int rIndex = cursor.getColumnIndexOrThrow(RecordsDbHelper.KEY_DATA); record.setText(cursor.getString(rIndex)); } } //         @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search_record: onSearchRequested(); return true; default: return false; } } }
      
      







рдлрд╝рд╛рдЗрд▓ рд╕реБрдЭрд╛рд╡

 package com.example.search; import android.app.SearchManager; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.net.Uri; import android.provider.BaseColumns; public class SuggestionProvider extends ContentProvider{ private RecordsDbHelper mDbHelper; public static String AUTHORITY = "com.example.search.SuggestionProvider"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/records"); //MIME   getType() public static final String RECORDS_MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.example.search"; public static final String RECORD_MIME_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.example.search"; //   URI private static final int SEARCH_RECORDS = 0; private static final int GET_RECORD = 1; private static final int SEARCH_SUGGEST = 2; private static final UriMatcher sURIMatcher = makeUriMatcher(); @Override public boolean onCreate() { mDbHelper = new RecordsDbHelper(getContext()); return true; } /** *    Search Manager'a. *    ,    URI. *      ,     selectionArgs   . *    . */ @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // UriMatcher,      .       switch (sURIMatcher.match(uri)) { case SEARCH_SUGGEST: if (selectionArgs == null) { throw new IllegalArgumentException( "selectionArgs must be provided for the Uri: " + uri); } return getSuggestions(selectionArgs[0]); case SEARCH_RECORDS: if (selectionArgs == null) { throw new IllegalArgumentException( "selectionArgs must be provided for the Uri: " + uri); } return search(selectionArgs[0]); case GET_RECORD: return getRecord(uri); default: throw new IllegalArgumentException("Unknown Uri: " + uri); } } private Cursor getSuggestions(String query) { query = query.toLowerCase(); String[] columns = new String[] { BaseColumns._ID, RecordsDbHelper.KEY_DATA, SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID}; return mDbHelper.getRecordMatches(query, columns); } private Cursor search(String query) { query = query.toLowerCase(); String[] columns = new String[] { BaseColumns._ID, RecordsDbHelper.KEY_DATA}; return mDbHelper.getRecordMatches(query, columns); } private Cursor getRecord(Uri uri) { String rowId = uri.getLastPathSegment(); String[] columns = new String[] { RecordsDbHelper.KEY_DATA}; return mDbHelper.getRecord(rowId, columns); } /** *   *     URI   */ private static UriMatcher makeUriMatcher() { UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); //   matcher.addURI(AUTHORITY, "records", SEARCH_RECORDS); matcher.addURI(AUTHORITY, "records/#", GET_RECORD); //   matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH_SUGGEST); matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST); return matcher; } //  (   ContentProvider) @Override public String getType(Uri uri) { switch (sURIMatcher.match(uri)) { case SEARCH_RECORDS: return RECORDS_MIME_TYPE; case SEARCH_SUGGEST: return SearchManager.SUGGEST_MIME_TYPE; case GET_RECORD: return RECORD_MIME_TYPE; default: throw new IllegalArgumentException("Unknown URL " + uri); } } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } @Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException(); } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { throw new UnsupportedOperationException(); } }
      
      







рдлрд╝рд╛рдЗрд▓ рд░рд┐рдХреЙрд░реНрдбреНрд╕DHHperper.java

 package com.example.search; import java.util.HashMap; import android.app.SearchManager; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.provider.BaseColumns; import android.util.Log; public class RecordsDbHelper { //    -  public static final String KEY_DATA = SearchManager.SUGGEST_COLUMN_TEXT_1; private static final String TAG = "RecordsDbHelper"; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; private static final String DATABASE_NAME = "datas"; private static final String DATABASE_TABLE = "records"; private static final int DATABASE_VERSION = 2; //   private static final String DATABASE_CREATE = "CREATE VIRTUAL TABLE " + DATABASE_TABLE + " USING fts3 (" + KEY_DATA + ");"; private static final HashMap<String,String> mColumnMap = buildColumnMap(); /** *  ,     rowId * @param rowId id   * @param columns   ;  null,   * @return ,    , null -      */ public Cursor getRecord(String rowId, String[] columns) { String selection = "rowid = ?"; String[] selectionArgs = new String[] {rowId}; return query(selection, selectionArgs, columns); } /** *  ,    ,    * @param query    * @param columns   ;  null,   * @return ,   ,   , null -      */ public Cursor getRecordMatches(String query, String[] columns) { String selection = KEY_DATA + " MATCH ?"; String[] selectionArgs = new String[] {query+"*"}; return query(selection, selectionArgs, columns); } /** *     . *      SQLiteQueryBuilder. *   ,        SUGGEST_COLUMN_INTENT_DATA_ID *        URI. */ private static HashMap<String,String> buildColumnMap() { HashMap<String,String> map = new HashMap<String,String>(); map.put(KEY_DATA, KEY_DATA); map.put(BaseColumns._ID, "rowid AS " + BaseColumns._ID); map.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, "rowid AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID); return map; } /** * * @param selection   * @param selectionArgs ,  "?"     * @param columns    * @return ,    ,     */ private Cursor query(String selection, String[] selectionArgs, String[] columns) { /* SQLiteBuilder       *   ,     - *   . */ SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); builder.setTables(DATABASE_TABLE); builder.setProjectionMap(mColumnMap); Cursor cursor = builder.query(mDbHelper.getReadableDatabase(), columns, selection, selectionArgs, null, null, null); if (cursor == null) { return null; } else if (!cursor.moveToFirst()) { cursor.close(); return null; } return cursor; } /** */  */ private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS records"); onCreate(db); } } public RecordsDbHelper(Context context) { mDbHelper = new DatabaseHelper(context); } /** *     * @param data ,    * @return id ,  -1,     */ public long createRecord(String data) { mDb = mDbHelper.getWritableDatabase(); ContentValues initialValues = new ContentValues(); initialValues.put(KEY_DATA, data); return mDb.insert(DATABASE_TABLE, null, initialValues); } }
      
      







рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ code.google.com рдкрд░ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!



All Articles