Привета я использовал SearchView, как показано ниже,Как сохранить мягкое состояние клавиатуры после invalidateOptionsMenu андроида
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.all_menu, menu);
SearchManager manager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(manager.getSearchableInfo(getActivity().getComponentName()));
searchTextView = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
try {
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchTextView, R.drawable.cursor); //This sets the cursor resource ID to 0 or @null which will make it visible on white background
} catch (Exception e) {
e.printStackTrace();
}
if (searchView != null) {
searchView.setQueryHint(getString(R.string.search));
searchView.setOnQueryTextListener(this);
}
mMenu = menu;
setNotificationCount(mMenu);
}
и я недействительность количества уведомлений, используя приведенный ниже код,
getSupportActionBar().invalidateOptionsMenu();
но недействительности меню закроет открытую клавиатуру. Я хочу сохранить состояние клавиатуры даже после недействительности меню панели действий. Поэтому я попытался сохранить состояние клавиатуры, используя приведенный ниже код,
KeyboardVisibilityEvent.setEventListener(getActivity(), new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
if(!isFristTime){
Log.d("ss","keyboard status before validated "+isKeyboardOpened);
isKeyboardOpened = isOpen;
isFristTime = true;
}
}
});
getSupportActionBar().invalidateOptionsMenu();
Log.d("ss","keyboard status after validated "+isKeyboardOpened);
if(isKeyboardOpened){
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
Log.d("ss","keyboard status in try ");
Field mCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
mCursorDrawableRes.setAccessible(true);
mCursorDrawableRes.set(searchTextView, R.drawable.cursor); //This sets the cursor resource ID to 0 or @null which will make it visible on white background
BDevice.showSoftKeyboard(getActivity(), searchTextView);
isKeyboardOpened = false;
getSupportActionBar().invalidateOptionsMenu();
} catch (Exception e) {
Log.d("ss","keyboard status in catch ");
e.printStackTrace();
}
}
}, 1000);
}
Но это не сработает. Теперь я хочу открыть мягкую клавиатуру, если она открыта перед отменой действия меню. Не могли бы вы предложить мне идею сохранить состояние клавиатуры после аннулирования меню?