Почему индикатор обновления снова появляется сверху, а не прилипает со смещениемAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Почему индикатор обновления снова появляется сверху, а не прилипает со смещением

Сообщение Anonymous »

По какой причине индикатор обновления появляется в верхней части экрана при переходе назад, вместо того, чтобы придерживаться предыдущей позиции смещения, продолжая обновляться, он снова появляется сверху, в первую очередь из-за того, как PullRefreshIndicator и модификатор pullRefresh реализованы в Jetpack Compose.
Примечание: внимательно следите за индикатором в последнем, который слегка выступает сверху к его смещению.
Изображение

@AndroidEntryPoint
class TestActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp()
}
}
}

@Composable
fun MyApp() {
// Define the routes and their respective icons
val topLevelRoutes = listOf(
TopLevelRoute("Profile", "profile", Icons.Filled.AccountCircle),
TopLevelRoute("Friends", "friends", Icons.Filled.People)
)

// Create a NavController
val navController = rememberNavController()

Scaffold(
bottomBar = {
BottomNavigation {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination
topLevelRoutes.forEach { topLevelRoute ->
BottomNavigationItem(
icon = { Icon(topLevelRoute.icon, contentDescription = topLevelRoute.name) },
label = { Text(topLevelRoute.name) },
selected = currentDestination?.route == topLevelRoute.route,
onClick = {
navController.navigate(topLevelRoute.route) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
}
) { innerPadding ->
NavHost(navController, startDestination = "profile", Modifier.padding(innerPadding)) {
composable("profile") { ProfileScreen() }
composable("friends") { FriendsScreen() }
}
}
}

data class TopLevelRoute(val name: String, val route: String, val icon: ImageVector)

@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
@Composable
fun ProfileScreen() {
var isRefreshing by rememberSaveable { mutableStateOf(false) }

// Create a pull refresh state
val pullRefreshState = rememberPullRefreshState(isRefreshing, onRefresh = {
// Trigger a refresh
isRefreshing = true
},refreshThreshold=180.dp, refreshingOffset = 180.dp)

// Launch an effect when refreshing starts
if (isRefreshing) {
LaunchedEffect(Unit) {
delay(10000) // Simulate a network call
isRefreshing = false // Reset refreshing state
}
}

// Content for the Profile screen
Surface {
Box(
modifier = Modifier
.fillMaxSize()
.pullRefresh(pullRefreshState)) {
Column(
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,

) {
// Your main content here
Text("Profile Screen", style = MaterialTheme.typography.h4)
}

PullRefreshIndicator(
refreshing = isRefreshing,
state = pullRefreshState,
modifier = Modifier.align(Alignment.TopCenter)
)
}
}
}

@Composable
fun FriendsScreen() {
// Content for the Friends screen
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Text("Friends Screen")
}
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... -on-offset
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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