Wygląda na to, że SearchView nie działa poprawnie we fragmencie. Kiedy wykonuję proste wyszukiwanie tekstowe, działa dobrze, ale kiedy stukniesz ikonę audio i coś wprowadzisz, widok wyszukiwania przekierowuje do głównego fragmentu.
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
// super.onCreateOptionsMenu(menu, inflater);
this.menu = menu;
inflater.inflate(R.menu.options_menu, menu);
SearchManager searchManager =
(SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.mainSearch).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(this);
}
Czy istnieje podobna metoda jak setOnQueryTextListener, ale dla ikony mikrofonu?
2 odpowiedzi
W metodzie onOptionsItemSelected:
case R.id.menuVoiceRecog:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo...");
startActivityForResult(intent, REQUEST_CODE);
break;
Następnie...
static final int REQUEST_CODE=1;
W onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
{
// Populate the wordsList with the String values the recognition engine thought it heard
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
showToast(matches.get(0));
edWords.setText(edWords.getText().toString().trim()+" "+matches.get(0));
}
super.onActivityResult(requestCode, resultCode, data);
}
Intencja zwraca pasujący wynik w postaci tablicy ze znacznikiem EXTRA_RESULTS. Gdzie 0 element jest najlepiej dopasowany, pierwszy element jest drugim najlepszym dopasowaniem i tak dalej. Nawet jeśli wypowiedziałeś kilka słów, całe rozpoznanie będzie dostępne jako pojedynczy ciąg jako tylko pierwszy ciąg. Więc łapiemy ten ciąg i dołączamy do naszego editText.
Wygląda na to, że to błąd Androida. Jedyna odpowiedź, jaką otrzymałem, nie działała, a i tak to był hack, więc to jest #AndroidBug
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.