2017-06-10 12 views
0

私のマニフェストファイルと呼ばれることは決してありません私はなぜ "doMySearch"メソッドが呼び出されることはないのか分かりません。検索アクティビティは

+0

'XML/searchable'が文字列の無いハードコーディングを持っていることを確認してください。 –

答えて

1

の私は、過去に同様の検索アプリを作っonNewIntentでコードを入れてください。ここに私の作業コードです。
のAndroidManifest.xml

 <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
      <meta-data 
       android:name="android.app.default_searchable" 
       android:value=".SearchActivity" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".SearchActivity" 
     > 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 
    </activity> 

MainActivityは、検索ウィジェットとツールバーがあります。

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.search, menu); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); 
    ComponentName component = new ComponentName(this, SearchActivity.class); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(component)); 
    searchView.setSubmitButtonEnabled(true); 
    return true; 
} 

そして最後にSearchActivity

public class SearchActivity extends AppCompatActivity { 
    TextView tvSearch; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_search); 
     tvSearch = (TextView) findViewById(R.id.tvSearchQuery); 
     handleIntent(getIntent()); 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     setIntent(intent); 
     handleIntent(intent); 
    } 

    private void handleIntent(Intent intent) { 
     if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
      String query = intent.getStringExtra(SearchManager.QUERY); 
      doMySearch(query); 
     } 
    } 

    private void doMySearch(String query) { 
     tvSearch.setText(query); 
    } 
} 
+0

MainActivityの下でを追加することができました。 –

+0

喜んで助けました。 –

0

代わりのonCreate

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     doMySearch(query); 
    } 
} 

代わりの

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // setContentView(R.layout.search); 
    doMySearch("hi"); 
    // Get the intent, verify the action and get the query 
    Intent intent = getIntent(); 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
     String query = intent.getStringExtra(SearchManager.QUERY); 
     doMySearch(query); 
    } 
} 
+0

これは私には役に立たなかった。 –

関連する問題