1

SearchableActivity을 수동으로 시작하는 방법에 대해 relatively simple tutorial을 따라 가며 result을 다시 얻을 수 있습니다.Activity에서 결과 얻기

그는

, 그것은 검색 의도를받을 수 있도록 기본적으로 (매니페스트) 검색 가능한 활동으로 기본 Activity (활동 A)를 설정 한 후 수동으로 startActivityForResult와 실제 검색 Activity (활동 B)를 시작한다

매니페스트를 변경 한 후 그는 한 블록의 코드 만 갖습니다. 내 질문 :

이 코드를 어디에 넣으시겠습니까?

private void handleIntent(Intent intent) { 
    // Get the intent, verify the action and get the query 
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) { 
    String query = intent.getStringExtra(SearchManager.QUERY); 
    // manually launch the real search activity 
    final Intent searchIntent = new Intent(getApplicationContext(), 
      MySearchActivity.class); 
    // add query to the Intent Extras 
    searchIntent.putExtra(SearchManager.QUERY, query); 
    startActivityForResult(searchIntent, ACTIVITY_REQUEST_CODE); 
    } 

Activity A 또는 B? 그리고 당신은 그것을 어디에서 부릅니까?

추가 정보 - 현재 어떻게 처리하고 있습니까? 잘라내시겠습니까?

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    MenuItem searchItem = menu.findItem(R.id.menu_search); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
    SearchView searchView = (SearchView) searchItem.getActionView(); 
    searchView.setSearchableInfo(searchManager 
      .getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(true); 

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    setupNewSearchView(searchItem, searchManager); 
} 

return true; 

}

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
private void setupNewSearchView(final MenuItem searchItem, SearchManager searchManager) { 
    android.widget.SearchView searchView = (android.widget.SearchView) searchItem.getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(true); 

} 

답변

2

먼저 메이크업 활동 (A) singleInstance/singleTop manifest.xml에 android:launchMode="singleInstance|singleTop"
는 handleIntent (의도)

에 활동 (A)에서 onNewIntent(Intent intent)를 사용 편집 :
활동 A.java

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

무슨 일이 일어 났는지 확실하게 보려면 tutorial을 읽어주십시오.

+0

잘 모르겠습니다. 'onNewIntent()'는 어디서 호출 되나요? 나는 'Activity' A에서 추측하고 있습니다.하지만 어디서? 'Activity' A가 시작될 때 (onCreate)? 아니면'SearchManager'가 정상적으로 호출되는 곳입니까? – KickingLettuce

+1

안드로이드 시스템은 검색 화면에 텍스트를 쓰고 키보드의 검색 버튼을 누른 후 검색 할 때 안드로이드 시스템은 새로운 활동 (A) (검색 활동으로 인 텐트가있는 새로운 활동 (A))을 시작합니다. 'singleInstance'를 사용했습니다. Activity (A)의 onNewIntent 함수가 검색 작업 의도와 함께 호출됩니다. – JafarKhQ

+0

다시 도움을 주셔서 감사합니다. 나는 네가하는 말을 이해한다. 그러나 "어디서"에 관해서는 아직도 불분명하다. 당신은 "그것은 검색 활동 의도와 함께 호출됩니다"라고 말했다. 바로 지금, 나는 onCreateOptionsMenu에서 이것을 처리한다. 위의 코드를 필요한 변경 작업 전에 어떻게 추가했는지 추가했습니다. 내가 그것을 부를 필요가 있습니까? (그리고 내가 이미 한 것을 제거해야합니까?) – KickingLettuce