recompose | converting Android layouts in XML to Kotlin code | Android library
kandi X-RAY | recompose Summary
kandi X-RAY | recompose Summary
recompose is a tool for converting Android layouts in XML to Kotlin code using Jetpack Compose. It can be used on the command line, as IntelliJ / Android Studio plugin or as a library in custom code.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of recompose
recompose Key Features
recompose Examples and Code Snippets
Community Discussions
Trending Discussions on recompose
QUESTION
Here I have stuck with dimensionResource(id)
. I don't know why it is not working but other stringResource(id)
, colorResource(id)
and painterResource(id)
are working fine.
Here are associated files.
1)Ui Composable (DimenErrorTest.kt)
...ANSWER
Answered 2022-Apr-05 at 07:37According to documentation, dimen
value should be followed by a unit of measure. For example dp
:
QUESTION
I'm new to Jetpack Compose and I'm trying to figure out how to recompose a LazyColumn list when user clicks a FloatingActionButton.
As the picture shows, I have a basic Scaffold layout with a LazyColumn for content. Toward the bottom is a FloatingActionButton. I'd like to be able to click that FloatingActionButton, add "Molly" to my list of names, have the app recompose my list, and display the full list including Molly. Code below picture.
Here's my code: ...ANSWER
Answered 2022-Mar-30 at 19:57Change
QUESTION
I constructed a lazycolumn where on every row I set pointer listeners. What I want is that after long click on any row, the following clicks will be in selection mode and change the background color of the row. The long click works as intended, but the clicks afterwards, though receiving the events and setting associated values correctly, don't seem to make the UI refresh (or recompose), and so the background colors are not set. Any ideas please?
...ANSWER
Answered 2022-Mar-19 at 15:21You are not reading var selectedIndex by remember { mutableStateOf(-1) }
anywhere in your code what triggers a recomposition in any Composable reading a mutableState value change. You can check here for smart recomposition.
QUESTION
I've got code like this:
...ANSWER
Answered 2022-Mar-13 at 13:07Compose can only understand that it should recompose if you set the value of a State
object. In your example myvalue.value++
is really just short for myvalue.value = myvalue.value.inc()
, so what triggers the recomposition is calling the state.value
setter.
If you just mutate a property of the object held by a state, you are not calling the setter and no recomposition happens.
So you have 2 options to solve this:
- Make
TestClass
immutable and update theState
with a new object
QUESTION
I have a multi module app where I recently began implementing Jetpack Compose. I defined some composables to be shared by different modules. I put those in another library module and imported in relevant places. Example composable:
...ANSWER
Answered 2022-Mar-07 at 20:30I found the issue when it would fail at runtime as well. Turns out I didn't have the "compose = true" in the build.gradle file of the module defining AppTheme etc. In other words, each build.gradle file requires these settings to be specified individually.
QUESTION
When state changes recomposition should fire. In code sample one state changes but recomposition doesn't fire but in code sample two state changes onButtonClick and recomposition fires.
How to make code sample one to recompose on state change?
- Below code does not fire recomposition
ANSWER
Answered 2022-Mar-05 at 20:04How to make code sample one to recompose on state change?
You should use a SideEffect
to mutate state during first composition in order for these changes to take "effect" :
QUESTION
Here is my problem;
- When I add MyText composable in my Screen, I see all Logs (value1, value2, value3) which means it is recomposing every part of my code.
- However when I comment the MyText line, I see only value3 on Logcat
How can I fix this ? I know it is not a big problem here but just imagine we have a scrollable Column here and we are trying to pass ScrollState.value to My Text component. Because of this situation, our list becomes so laggy.
...ANSWER
Answered 2022-Feb-22 at 04:19This behaviour is totally expected.
Compose is trying to reduce number of recompositions as much as possible. When you comment out MyText
, the only view that depends on counter
is Button
content, so this is the only view that needs to be recomposed.
By the same logic you shouldn't see VALUE1
logs more than once, but the difference here is that Column
is inline
function, so if it content needs to be recomposed - it gets recomposed with the containing view.
Using this knowledge, you can easily prevent a view from being recomposed: you need to move part, which doesn't depends on the state, into a separate composable. The fact that it uses scrollState
won't make it recompose, only reading state value will trigger recomposition.
QUESTION
I am using a BottomNavigation
with 4 composables. All of them have a LazyColumn
with each item in the LazyColumn
having an image populated from the network using Coil for Jetpack Compose. Similar to Twitter/YouTube.
When I navigate between these items, the composables get destroyed and recompose only when navigated back to them. Even the coil images are cleared and re-fetched (from memory or local storage) when navigated between these composables. This is of course the expected behavior.
The problem is that this is causing the navigation between them to be too slow. Coil images take about 400ms to 700ms to load the image for every navigation. Apps like YouTube/LinkedIn are literally instant in their BottomBar
navigations.
When I was using XML for this, I would make the fragments(used as bottom nav items ) with an appear/disappear logic to avoid this time delay while navigating between them.
How do I achieve the same with Compose ?
I am using the following versions:
...ANSWER
Answered 2022-Feb-19 at 14:00Well I had the same problem using emulator or phone
both work well with small simplistic composables. And when I create more complex Composable and try animating the navigation, using the accompanist animation library it gets very laggy.
But then I tried building the release APK file, since it is usually optimized and way faster, and that will significantly speed up your app. Here is link on how you can generate signed APK then install it on your phone or emulator and see if that fixes your problem!
You could also check if you accidentally disabled the hardware acceleration from the manifest. Make sure you set android:hardwareAccelerated="true"
in you activity tag.
In case that does not help either, then you have to implement your own animation and use Shared ViewModel, for communication and triggering the transition from one Composable to another. The idea is that you can use modifier offset
property to show/hide the Composable by placing it outside the screen.
First set your ViewModel, and add mutable state variable, that will trigger the transition from Home to Settings and vice versa.
This is not the best practice, since there is no way to directly pass data from one composable to another as you would normally do with the normal navigation. But you can still share data using the Shared ViewModel. Using this method it will not recompose your Composable, and thus be really fast. So far I have no problem with any out of memory exceptions even on some very old/slow devices with 2GB RAM.
QUESTION
In Jetpack Compose we see all built in composable have flattened inputs, is it intended? Or wrapping too many inputs with data class (which is good and clean practice) has the same performance?
Consider this sample
...ANSWER
Answered 2022-Feb-17 at 23:34I think the performance impact is minimal from choosing one or another. I think that the Compose developers just didn't think data classes as parameter where the best route, and I agree.
I don't see how this:
QUESTION
As far as I understood, each part of code which is related to any state will be changed(recomposed) with state changes →
And each state is an observable and the dependent UI part observes that state and is subscribed to it(the state) and whenever the state changes it will be notified(redrawing that part of UI) and happening recomposition.
But here in this article of google Thinking in compose, it says that recomposition happens with changing input, so I am confused.
Recomposition is the process of calling your composable functions again when inputs change. This happens when the function's inputs change. When Compose recomposes based on new inputs, it only calls the functions or lambdas that might have changed, and skips the rest. By skipping all functions or lambdas that don't have changed parameters, Compose can recompose efficiently.
Also, here in other sample of compose-roadmap, encourage hoisting the state to make the composable function stateless to avoid recompositions
So it would be great, if someone can make it clear that the recompositions happens only with state changes or input changes also causes?
Thank you in advance for your help
...ANSWER
Answered 2022-Feb-17 at 11:34Recomposition happens when either the parameter values change or a mutable state variable within the composable function is updated.
A stateless function, sometimes referred to as an "immutable" function, is one where no data is stored in the function. This means that if you call the function repeatedly, it would be the same as if you had called it for the first time. The function retains no memory of any variables each time it is called.
Hoisting the state of a composable means that the state variables are kept outside of the composable and the values of those state variables are passed into the composable as normal parameters. This allows you to reuse the composable. This is especially important if you are creating a library of composables that you want to reuse from one project to another. Users of the library can be assured that there are no state dependencies that the composable requires. If you want a truely stateless composable, you would avoid doing things like passing in viewmodels. A viewmodel is very much dependent on the app in which it resides and will have code in it that is very specific to the app. A stateless composable has no dependencies on the app and therefore can be reused elsewhere.
That doesn't mean that you can't use viewmodels in your composables. Initially Google was against this when Compose first came out but realized that it was very awkward for developers. If a developer had no reason to make a reusable composable outside of the screen that it appears on, hoisting the state for every composable becomes a pain resulting in unnecessary boilerplate code. So the general rule is that if your composable is not going to be reused elsewhere and you need access to viewmodel data, you can either pass in the viewmodel as a parameter or access it within the composable through other means.
Aside from viewmodels, you may still want to make a composable stateful even when it needs to be reused. A good example of this is if you are using a TextField. As you are typing in text, you want the text to appear. Without using a state variable to retain the typed characters, you won't see the TextField update. For this reason, using a local state variable to store the entered characters is acceptable. While this doesn't make the composable stateless, it is still something you need to implement. However, even in this example, you can still make it stateless by passing the typed characters back up to the hoisted function and storing it in a viewmodel state variable that in turn triggers the hoisted function to recompose the composable and pass in the text that the TextField needs. But this is rather convoluted and a big round trip just to get characters shown in the TextField and therefore isn't recommended. You might want to do it though if you have a very complex TextField composable and you need to process the characters in your viewmodel as they are being typed - such as might be the case for doing a suggestion lookup for a url.
So even if your composable is stateless but your viewmodel has a mutable state variable that the hoisted function is observing, if the mutable state of that variable changes, the hoisted function will recompose. But whether the composable that the hoisted composable is calling gets recomposed depends on whether the parameter values to that composable change. If they change, a recomposition will occur.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install recompose
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page