Всякий раз, когда я пытаюсь вернуться на перемещение с приведенного ниже экрана, я получаю сбой. < /p>
@OptIn(
ExperimentalFoundationApi::class,
ExperimentalMaterial3Api::class
)
@Composable
fun MailRoomScreen(
navController: NavHostController,
mailroomViewModel: MailroomViewModel = hiltViewModel()
) {
val context = LocalContext.current
val appNavigationActions = AppNavigationActions(navController)
val webView = remember { WebView(context) }
val tabs by mailroomViewModel.tabs.collectAsState()
val pagerState = rememberPagerState(
initialPage = 0,
initialPageOffsetFraction = 0f,
pageCount = {
tabs.size
}
)
val scope = rememberCoroutineScope()
LaunchedEffect(tabs) {
if (pagerState.currentPage !in tabs.indices) {
pagerState.scrollToPage(0)
}
}
LaunchedEffect(Unit) {
mailroomViewModel.getTabs()
}
Scaffold(
topBar = {
TopAppBar(
title = {
Text(
text = "Mailroom"
)
},
navigationIcon = {
IconButton(
onClick = {
webView.destroy()
navController.popBackStack()
}
) {
Icon(
Icons.Filled.ArrowBack,
contentDescription = "Back"
)
}
},
actions = {
Icon(
Icons.Rounded.AddAlert,
contentDescription = "Notify",
modifier = Modifier.size(30.dp)
)
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = materialColor,
titleContentColor = Color.White,
navigationIconContentColor = Color.White,
actionIconContentColor = Color.White
)
)
},
floatingActionButton = {
if (tabs.isNotEmpty()) {
// Add a floating action button on both the tabs
when (pagerState.currentPage) {
0 -> {
FloatingActionButton(
onClick = {
val jsonObject1 = JsonObject()
jsonObject1.addProperty("formId", "in")
val jsonString = jsonObject1.toString()
navController.navigate(
Destinations.MAILROOM_FORM_ROUTE.replace(
oldValue = "{jsonString}",
newValue = URLEncoder.encode(jsonString, "utf-8")
)
) {
popUpTo(Destinations.MAILROOM_FORM_ROUTE) {
inclusive = true
}
}
},
containerColor = Color(0xFF006164),
contentColor = Color.White
) {
Icon(
Icons.Filled.Add,
contentDescription = "Add"
)
}
}
1 -> {
FloatingActionButton(
onClick = {
val jsonObject = JsonObject()
jsonObject.addProperty("formId", "out")
val jsonString = jsonObject.toString()
navController.navigate(
Destinations.MAILROOM_FORM_ROUTE.replace(
oldValue = "{jsonString}",
newValue = URLEncoder.encode(jsonString, "utf-8")
)
) {
popUpTo(Destinations.MAILROOM_FORM_ROUTE) {
inclusive = true
}
}
},
containerColor = Color(0xFF006164),
contentColor = Color.White
) {
Icon(
Icons.Filled.Add,
contentDescription = "Add"
)
}
}
}
}
}
) { paddingValues ->
Column {
// TabRow below the TopAppBar
if (tabs.isNotEmpty() && pagerState.currentPage in tabs.indices) {
TabRow(
selectedTabIndex = pagerState.currentPage,
containerColor = materialColor,
contentColor = Color.White,
modifier = Modifier.padding(paddingValues),
indicator = { tabPositions ->
if (pagerState.currentPage in tabPositions.indices) {
SecondaryIndicator(
Modifier
.padding(
start = 10.dp,
end = 10.dp
)
.tabIndicatorOffset(tabPositions[pagerState.currentPage]),
height = 4.dp,
color = Color.White
)
}
}
) {
tabs.forEachIndexed { index, title ->
Tab(
selected = pagerState.currentPage == index,
onClick = {
scope.launch {
pagerState.animateScrollToPage(index)
}
},
text = {
Text(
text = title,
style = MaterialTheme.typography.bodyMedium
)
},
selectedContentColor = Color.White,
unselectedContentColor = Color.White,
)
}
}
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxSize()
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
when (it) {
0 -> {
MailRoomInScreen(
webView = webView,
mailRoomViewModel = mailroomViewModel,
navController = navController
)
//Text(text = "In")
}
1 -> Text(text = "Out")
}
}
}
} else {
// Handle the empty state or invalid pager state
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text(text = "No tabs available")
}
}
}
}
}
< /code>
@Composable
fun MailRoomInScreen(
webView: WebView,
mailRoomViewModel: MailroomViewModel,
navController: NavHostController
) {
val context = LocalContext.current
val mailRoomLogs by mailRoomViewModel.mailRoomLogs.collectAsState()
val type = "inTab"
val appNavigationActions = AppNavigationActions(navController)
// Initialize the WebView
val webView = remember {
WebView(context).apply {
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
addJavascriptInterface(
MailRoomListInterface(navController, mailRoomViewModel, this, context),
"Android"
)
webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val jsonData = convertToJson(mailRoomLogs, type)
view?.evaluateJavascript("showList($jsonData)") { result ->
Log.d("Result", result)
}
}
}
loadUrl(BaseUrls.ListUrl)
}
}
// Dispose of the WebView when the composable is removed from the composition
DisposableEffect(Unit) {
onDispose {
webView.loadData("", "text/html", "base64")
webView.destroy()
}
}
// Load mail room logs when the composable is first composed
LaunchedEffect(Unit) {
mailRoomViewModel.getMailRoomLogs()
}
// Display the WebView
AndroidView(
factory = { webView },
modifier = Modifier.fillMaxSize()
)
}
< /code>
But if I replace the tab screen with a simple Text composable, the issue disappears. When I checked documentation, it led me to Android Native Crash, but I am still not able to solve the issue.
I wanted to navigate back from the current screen, but while doing so, it is resulting in a crash.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ddr-0x20-i
Как решить «Фатальный сигнал 11 (sigsegv), код 1 (segv_maperr), ошибка ошибки 0x20 в Tid 19443 (renderthread)» в Android ⇐ Android
Форум для тех, кто программирует под Android
1750929250
Anonymous
Всякий раз, когда я пытаюсь вернуться на перемещение с приведенного ниже экрана, я получаю сбой. < /p>
@OptIn(
ExperimentalFoundationApi::class,
ExperimentalMaterial3Api::class
)
@Composable
fun MailRoomScreen(
navController: NavHostController,
mailroomViewModel: MailroomViewModel = hiltViewModel()
) {
val context = LocalContext.current
val appNavigationActions = AppNavigationActions(navController)
val webView = remember { WebView(context) }
val tabs by mailroomViewModel.tabs.collectAsState()
val pagerState = rememberPagerState(
initialPage = 0,
initialPageOffsetFraction = 0f,
pageCount = {
tabs.size
}
)
val scope = rememberCoroutineScope()
LaunchedEffect(tabs) {
if (pagerState.currentPage !in tabs.indices) {
pagerState.scrollToPage(0)
}
}
LaunchedEffect(Unit) {
mailroomViewModel.getTabs()
}
Scaffold(
topBar = {
TopAppBar(
title = {
Text(
text = "Mailroom"
)
},
navigationIcon = {
IconButton(
onClick = {
webView.destroy()
navController.popBackStack()
}
) {
Icon(
Icons.Filled.ArrowBack,
contentDescription = "Back"
)
}
},
actions = {
Icon(
Icons.Rounded.AddAlert,
contentDescription = "Notify",
modifier = Modifier.size(30.dp)
)
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = materialColor,
titleContentColor = Color.White,
navigationIconContentColor = Color.White,
actionIconContentColor = Color.White
)
)
},
floatingActionButton = {
if (tabs.isNotEmpty()) {
// Add a floating action button on both the tabs
when (pagerState.currentPage) {
0 -> {
FloatingActionButton(
onClick = {
val jsonObject1 = JsonObject()
jsonObject1.addProperty("formId", "in")
val jsonString = jsonObject1.toString()
navController.navigate(
Destinations.MAILROOM_FORM_ROUTE.replace(
oldValue = "{jsonString}",
newValue = URLEncoder.encode(jsonString, "utf-8")
)
) {
popUpTo(Destinations.MAILROOM_FORM_ROUTE) {
inclusive = true
}
}
},
containerColor = Color(0xFF006164),
contentColor = Color.White
) {
Icon(
Icons.Filled.Add,
contentDescription = "Add"
)
}
}
1 -> {
FloatingActionButton(
onClick = {
val jsonObject = JsonObject()
jsonObject.addProperty("formId", "out")
val jsonString = jsonObject.toString()
navController.navigate(
Destinations.MAILROOM_FORM_ROUTE.replace(
oldValue = "{jsonString}",
newValue = URLEncoder.encode(jsonString, "utf-8")
)
) {
popUpTo(Destinations.MAILROOM_FORM_ROUTE) {
inclusive = true
}
}
},
containerColor = Color(0xFF006164),
contentColor = Color.White
) {
Icon(
Icons.Filled.Add,
contentDescription = "Add"
)
}
}
}
}
}
) { paddingValues ->
Column {
// TabRow below the TopAppBar
if (tabs.isNotEmpty() && pagerState.currentPage in tabs.indices) {
TabRow(
selectedTabIndex = pagerState.currentPage,
containerColor = materialColor,
contentColor = Color.White,
modifier = Modifier.padding(paddingValues),
indicator = { tabPositions ->
if (pagerState.currentPage in tabPositions.indices) {
SecondaryIndicator(
Modifier
.padding(
start = 10.dp,
end = 10.dp
)
.tabIndicatorOffset(tabPositions[pagerState.currentPage]),
height = 4.dp,
color = Color.White
)
}
}
) {
tabs.forEachIndexed { index, title ->
Tab(
selected = pagerState.currentPage == index,
onClick = {
scope.launch {
pagerState.animateScrollToPage(index)
}
},
text = {
Text(
text = title,
style = MaterialTheme.typography.bodyMedium
)
},
selectedContentColor = Color.White,
unselectedContentColor = Color.White,
)
}
}
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxSize()
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
when (it) {
0 -> {
MailRoomInScreen(
webView = webView,
mailRoomViewModel = mailroomViewModel,
navController = navController
)
//Text(text = "In")
}
1 -> Text(text = "Out")
}
}
}
} else {
// Handle the empty state or invalid pager state
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text(text = "No tabs available")
}
}
}
}
}
< /code>
@Composable
fun MailRoomInScreen(
webView: WebView,
mailRoomViewModel: MailroomViewModel,
navController: NavHostController
) {
val context = LocalContext.current
val mailRoomLogs by mailRoomViewModel.mailRoomLogs.collectAsState()
val type = "inTab"
val appNavigationActions = AppNavigationActions(navController)
// Initialize the WebView
val webView = remember {
WebView(context).apply {
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
addJavascriptInterface(
MailRoomListInterface(navController, mailRoomViewModel, this, context),
"Android"
)
webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val jsonData = convertToJson(mailRoomLogs, type)
view?.evaluateJavascript("showList($jsonData)") { result ->
Log.d("Result", result)
}
}
}
loadUrl(BaseUrls.ListUrl)
}
}
// Dispose of the WebView when the composable is removed from the composition
DisposableEffect(Unit) {
onDispose {
webView.loadData("", "text/html", "base64")
webView.destroy()
}
}
// Load mail room logs when the composable is first composed
LaunchedEffect(Unit) {
mailRoomViewModel.getMailRoomLogs()
}
// Display the WebView
AndroidView(
factory = { webView },
modifier = Modifier.fillMaxSize()
)
}
< /code>
But if I replace the tab screen with a simple Text composable, the issue disappears. When I checked documentation, it led me to Android Native Crash, but I am still not able to solve the issue.
I wanted to navigate back from the current screen, but while doing so, it is resulting in a crash.
Подробнее здесь: [url]https://stackoverflow.com/questions/79334922/how-to-solve-fatal-signal-11-sigsegv-code-1-segv-maperr-fault-addr-0x20-i[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия