2014-12-19 7 views
6

이 작은 테스트 응용 프로그램을 작성하여 사용자가 검색 버튼을 눌렀을 때 검색 가능한 활동이 시작되지 않음을 보여줍니다 키보드.Android 지원 검색 : 검색 버튼이 검색 가능한 활동을 호출하지 않음 (다른 솔루션이 도움이되지 않음)

나는 developer guides을 따라 왔지만 웹 검색에서 은 공식 개발자 가이드에서 몇 가지 사항을 빠뜨린 것으로 나타났습니다. 내 SO (도움이되지 않았다) 검색: 매니페스트에서 요소에 태그를 추가하여 해결

  • Reference 1:. 또한 샘플 "사용자 사전"의 매니페스트를 조사했습니다 (어디서 샘플을 온라인으로 찾을 수 있는지 또는 링크 할 수 있는지 모르겠습니다). 이 태그는 응용 프로그램 요소에 있습니다.

  • Reference 2:/XML/searchable.xml는 문자열 리소스에 대한 참조하지 하드 코딩 된 문자열이어야 고해상도에서 : "힌트 안드로이드" "안드로이드 라벨"와. 내 것이.

  • Reference 3: 으로 태그를 추가 의 매니페스트 : "(값 ="< 검색 활동 이름>. "" 로이드 "로이드 NAME ="android.app.default_searchable "및") 검색이 시작될 곳의 활동입니다. 시도한 이 작동하지 않는 것 같습니다.

  • Reference 4: "검색 가능한 작업은 무언가를해야하며 은 실제로 결과를 표시해야합니다." 광산은 ACTION_SEARCH 동작으로 의도를 수신하고 검색된 검색 쿼리 문자열을 "performSearch (string)"메서드에 전달합니다.이 메서드는 문자열을 텍스트 뷰에 표시합니다.

는 그래서 어떻게 내가 잘못하고있는 중이 야, 나는이 문제를 해결하기 위해 무엇을 할 수 있는가?

코드 :MainActivity.java이 - 하나의 SearchView을 가지고 - 사용자가 쿼리를 입력하고 키보드의 검색 버튼을 누른다.

public class MainActivity extends ActionBarActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

TestTwoActivity.java

public class TestTwoActivity extends Activity { 
     TextView tv; 
     private static final String TAG = TestTwoActivity.class.getSimpleName(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_test_two); 

      /** 
      * The following code enables assisted search on the SearchView by calling setSearchableInfo() and passing it our SearchableInfo object. 
      */ 
      SearchView searchView = (SearchView) findViewById(R.id.searchActivity_searchView); 
      // SearchManager => provides access to the system search services. 

      // Context.getSystemService() => Return the handle to a system-level 
      // service by name. The class of the returned object varies by the 
      // requested name. 

      // Context.SEARCH_SERVICE => Returns a SearchManager for handling search 

      // Context = Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android 
      // system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching 
      // activities, broadcasting and receiving intents, etc. 

      // Activity.getComponentName = Returns a complete component name for this Activity 

      SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
      searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

      /** 
      * If the search is executed from another activity, the query is sent to this (searchable) activity in an Intent with ACTION_SEARCH action. 
      */ 
      // getIntent() Returns the intent that started this Activity 
      Intent intent = getIntent(); 
      if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
       Log.i(TAG, "Search Query Delivered");//check 
       String searchQuery = intent.getStringExtra(SearchManager.QUERY); 
       performSearch(searchQuery); 
      } 

     } 

     private void performSearch(String searchQuery) { 
      //Just for testing purposes, I am simply printing the search query delivered to this searchable activity in a textview. 
      tv = (TextView) findViewById(R.id.testTwoActivity_textView); 
      tv.setText(searchQuery); 
     } 
} 

입술/XML/검색.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/searchViewHint" > 
</searchable> 

매니페스트 파일

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.tests" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".TestTwoActivity" 
      android:label="@string/title_activity_test_two" > 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH"/> <!-- Declares the activity to accept ACTION_SEARCH intent --> 
      </intent-filter> 
       <meta-data 
        android:name="android.app.searchable" 
        android:resource="@xml/searchable" /> <!-- Specifies the searchable configuration to use --> 
     </activity> 

     <!-- Points to searchable activity so the whole app can invoke search. --> 
     <meta-data android:name="android.app.default_searchable" 
        android:value=".TestTwoActivity" /> 

    </application> 

</manifest> 

레이아웃 :

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 

    android:orientation="vertical" 

    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context="com.tests.MainActivity" > 

    <android.support.v7.widget.SearchView 
     android:id="@+id/searchActivity_searchView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

</LinearLayout> 

activity_test_two.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 

    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context="${relativePackage}.${activityClass}" > 

    <android.support.v7.widget.SearchView 
     android:id="@+id/searchActivity_searchView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

    <TextView 
     android:id="@+id/testTwoActivity_textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

편집 1 : 그것은 내가 완벽하게 작동 검색 dilogue 대신 검색 위젯과 유사한 응용 프로그램을 쓴 미친 짓이야.

이클립스에서 디버깅을 시도했으나 TestTwoActivity (검색 가능한 작업)이 단순히 시작되지 않기 때문에 디버깅이 중지됩니다. 보조 노트로

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    SearchView searchView = (SearchView) findViewById(R.id.searchActivity_searchView); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
} 

:

내가 문제를 했어 당신이 그것을 추가 잊어 버린하지만 SearchView에 검색 정보를 설정하여 MainActivity 미스 경우

답변

5

는 잘 모르겠어요 flavor를 사용할 때 default_searchable 메타 태그를 사용합니다. 검색 활동 예컨대 :

<meta-data 
    android:name="android.app.default_searchable" 
    android:value="com.example.SearchActivity"/> 
+0

나는 그것을 잊고 있었던 나는, 내 나쁜 시간 내 코드 수백 보았지만이 표시되지 않았에 (맛 생략)의 전체 경로를 사용하는 경우에만 작업에 보였다. 고맙습니다. – Solace