2016-09-29 2 views
0

Я хочу вызвать функцию у родителя активности поиска при нажатии на результат поиска. Как я могу это сделать? (Могу ли я передать ссылку родителя на операцию поиска для интерфейса? Или есть ли возможность начать поисковую деятельность для результата? Или можно начать поиск в родительской деятельности?)Функция вызова Android в родительском элементе SearchActivity

... 
<activity 
     android:name=".MainActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize|screenLayout" 
     android:keepScreenOn="true" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <meta-data 
      android:name="android.app.default_searchable" 
      android:value=".search.SearchAllActivity"/> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH"/> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data 
       ... 
     </intent-filter> 
    </activity> 
... 
<activity 
     android:name=".search.SearchAllActivity" 
     android:label="@string/title_search" 
     android:theme="@style/AppTheme"> 
     <intent-filter> 
      <action android:name="android.intent.action.SEARCH"/> 
     </intent-filter> 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable"/> 
    </activity> 

MainActivity запускает поиск. Поиск выполняется, и результаты отображаются в SearchAllActivity.

Edit: Одно из очевидных решений (к очевидным для меня) было бы установить setOnQueryTextListener и запустить поиск вручную:

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
       @Override 
       public boolean onQueryTextSubmit(String query) { 
        Intent intent = new Intent().setClass(mContext, SearchAllActivity.class); 
        intent.putExtra("query", mSearchView.getQuery()); 

        startActivityForResult(intent, 42); 
        return false; 
       } 

       @Override 
       public boolean onQueryTextChange(String newText) { 
        return false; 
       } 
      }); 

В SearchAllActivity:

private void handleIntent(Intent intent) { 
     String query = intent.getCharSequenceExtra("query").toString(); 

     SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, suggestionProvider.AUTHORITY, suggestionProvider.MODE); 
     suggestions.saveRecentQuery(query, null); 

     runSearch(query); 
} 

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

Но теперь suggestionsprovider не Работающий

ответ

0

Поиск на сайте Как это

Intent intent=new Intent(MainActivity.this,SearchActivity.class); 
       startActivityForResult(intent, 2);// Activity is started with requestCode 2 

после поиска добавьте ниже код, чтобы отправить результат MainActivity

Intent intent=new Intent(); 
        intent.putExtra("MESSAGE",message); 
        setResult(2,intent); 
        finish();//finishing activity 

Поймать Результат от SearchActivity в MainActivity добавить ниже код в MainActivity

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
       super.onActivityResult(requestCode, resultCode, data); 
        // check if the request code is same as what is passed here it is 2 
        if(requestCode==2) 
         { 
          String message=data.getStringExtra("MESSAGE"); 
          textView1.setText(message); 
         } 
    } 
+0

, что это то, что я хотел бы сделать, но проблема заключается в том, что SearchActivity запускается, когда пользователь нажал ввести в searchview. Поэтому я не знаю, как/когда/где начать свою деятельность с помощью функции startActivityFoResult (намерение, запрос) – HappyCoder