Как исправить onBackPressed для расширенной панели поиска Material3?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как исправить onBackPressed для расширенной панели поиска Material3?

Сообщение Anonymous »

Я использую androidx.compose.material3.SearchBar в развернутом состоянии в своем проекте Android. На снимках экрана показано, что происходит, когда пользователь выполняет жест назад.
[img]https://i .sstatic.net/gw6PDePI.png[/img]

Вот структура соответствующих классов и файлов:
SearchActivity.kt:

Код: Выделить всё

class SearchActivity {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
if (savedInstanceState == null) {
addFragment(R.id.container, SearchFragment(), SearchFragment.FRAGMENT_TAG)
}
}
}
layout/activity_search.xml: SearchFragment.kt:

Код: Выделить всё

class SearchFragment : Fragment() {

companion object {
const val FRAGMENT_TAG = "SEARCH_FRAGMENT_TAG"

fun replaceAtBackStack(fragmentManager: FragmentManager, @IdRes containerViewId: Int) {
fragmentManager.commit {
fragmentManager.popBackStack(FRAGMENT_TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE)
fragmentManager.replaceFragment(containerViewId, SearchFragment(), FRAGMENT_TAG, FRAGMENT_TAG)
}
}
}

private val viewModelFactory by lazy { SearchViewModelFactory(/*...*/) }
private val viewModel: SearchViewModel by viewModels { viewModelFactory }

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
inflater.inflate(R.layout.fragment_search, container, false).apply {
findViewById(R.id.search_view).apply {
setViewCompositionStrategy(DisposeOnViewTreeLifecycleDestroyed)
setContent {
SearchScreen(
searchQuery = viewModel.searchQuery,
state = viewModel.searchResultsState.collectAsState().value,
onViewEvent = viewModel::onViewEvent,
)
}
isClickable = true
}
}

}
layout/fragment_search.xml: SearchScreen.kt:

Код: Выделить всё

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SearchScreen(
searchQuery: String,
state: SearchResultState,
onViewEvent: (SearchViewEvent) ->  Unit,
) {
MyTheme {
Scaffold { contentPadding ->
Box(
Modifier
.padding(contentPadding)
) {
var text by rememberSaveable { mutableStateOf(searchQuery) }
val expanded = true
SearchBar(
modifier = Modifier
.align(TopCenter)
.semantics { traversalIndex = 0f },
inputField = {
SearchBarDefaults.InputField(
query = text,
onQueryChange = {
text = it
onViewEvent(OnSearchQueryChange(it))
},
onSearch = { },
expanded = expanded,
onExpandedChange = { },
placeholder = { Text(stringResource(R.string.search_query_hint)) },
leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
)
},
expanded = expanded,
onExpandedChange = { }
) {
when (state) {
is Loading -> Loading()
is Success -> {
val sessions = state.parameters
if (sessions.isEmpty()) {
NoSearchResult()
} else {
SearchResultList(
parameters = sessions,
onViewEvent = onViewEvent,
)
}
}
}
}
}
}
}
}
По какой-то причине SearchBar использует жест назад. Это не позволяет пользователю вообще покинуть экран. Как это можно исправить?


Подробнее здесь: https://stackoverflow.com/questions/791 ... -searchbar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»