0

Я использую ActionBarCompat и QuickAction (https://github.com/lorensiuswlt/NewQuickAction также показано на http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/) в моем приложении для Android.Поиск в Android-браузере отображает меню QuickAction, но перестает получать события на клавиатуре

Справа от панели действий есть значок традиционного поиска, пользователь прикасается к нему, окно поиска расширяется и пользователь может вводить запросы.

У меня есть требование, чтобы вместо поиска последних запросов всплывающее окно отображало два элемента: «поиск TYPED_TEXT в foo» и «поиск TYPED_TEXT в строке», поэтому вместо использования поиска по умолчанию всплывает (так что я выиграл «нужно иметь дело с контент-провайдерами и высмеивать курсор, чтобы показать те же два элемента).

в моем SearchView.OnQueryTextListener, onQueryTextChange переопределяется, поэтому, когда пользователь вводит не менее 3 символов, я установил QuickAction и покажу его.

SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextChange(String newText) { 
      Context context = MyActivity.this.getBaseContext(); 
      LayoutInflater inflator = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View rootView = inflator.inflate(R.layout.quickaction_popup, null);     

      rootView.measure(0, 0); 

      QuickActionList action = new QuickActionList(MyActivity.this, 
       QuickActionList.HORIZONTAL, new LayoutParams(LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT)); 

      action.addActionView(rootView); 
      action.show(mSearchView);    

      // [1]. I'll explain this comment line below. 

      return false; // I tried with return true as well to indicate I've consumed the event here. 
    } 
} 

Проблема заключается в следующем: после быстрого действия я ничего не могу напечатать. Я должен снова коснуться вида поиска, чтобы ввести другой символ.

Где я комментировал с // [1], я пытался изменить фокус с setFocusable + requestFocus, setFocusableInTouchModerequestFocus + и даже setFocusable + setFocusableInTouchMode + requestFocus, но не успех на всех. Вот фрагмент кода, который заменил // [1]:

mSearchView.setFocusable(true); 
mSearchView.setFocusableInTouchMode(true); 
boolean gotFocus = mSearchView.requestFocus(); 
Log.d("DOUG", Boolean.toString(gotFocus)); 

журнал показывает gotFocus = true, но я до сих пор не может набрать. Я вижу синюю полосу, показывающую, что она готова принять вход, но она не мигает. Мягкая клавиатура продолжает показывать, но когда я печатаю, это похоже на то, что я набираю что-то не редактируемое. Вероятно, QuickAction захватывает событие софт-ключа, но я не мог найти, как этого избежать.

Любые идеи о том, как решить это или обходное решение?

Благодаря

ответ

0

Я в конечном итоге изменения PopupWindows.java внутри NewQuickAction так, что preShow необязательно принимает параметр, чтобы сказать, если всплывающее окно фокусирования. Затем он передает параметр mWindow.setFocusable(…).