setVisibility() не обновляет макет активности
Я устанавливаю видимость кнопки как VISIBLE или GONE при выборе элемента счетчика:-
selectUserTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
FilterUserType newUserType = FilterUserType.get(position);
if(filter.userType != newUserType){
filter.userType = newUserType;
ScrollView mainScrollView = (ScrollView) findViewById(R.id.mainLayout);
switch (newUserType) {
case AnyUser:
case CurrentUser:{
selectUserBtn.setVisibility(View.GONE);
break;
}
case SpecificUser:{
selectUserBtn.setVisibility(View.VISIBLE);
break;
}
default:
break;
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});
Здесь проблема в том, что мое представление не обновляется после этого действия, но когда я выбираю один EditText на странице и клавиатура работает.. в это время он обновляется и показывает желаемое поведение.
Я пробовал редактировать switch-case как:
switch (newUserType) {
case AnyUser:
case CurrentUser:{
selectUserBtn.setVisibility(View.GONE);
mainScrollView.invalidate();
break;
}
case SpecificUser:{
selectUserBtn.setVisibility(View.VISIBLE);
mainScrollView.invalidate();
break;
}
default:
break;
}
}
Но это тоже не работает
К вашему сведению, я использую HoloEverywhere
тема в моем проекте, и этот счетчик из виджетов HoloEverywhere.
2 ответа
У меня такая же проблема. Класс spinner из holoeverywhere обновляет свою графику после вызова onItemSelected. Так что это "переопределяет" ваше обновление макета. Единственное решение, которое я нашел, было установить обработчик для обновления пользовательского интерфейса, который будет исполнен через 1 секунду в будущем. Как это:
Handler han = new Handler();
han.postAtTime(new Runnable() {
@Override
public void run() {
// UPDATE UI HERE
}
}, 1000);
Самое простое решение anno 2022 — использовать следующий метод:
runOnUiThread(() -> mBoatSelectMenu.setVisibility(View.VISIBLE));
Где mBoatSelectMenu указанный идентификатор XML относится к выбранному элементу.