Comments (6)
The original Flow did have a replaceTop()
operator but for whatever reason I never had a need for it even though we've used it in multiple projects, so it's not a "first-class" method in simple-stack
.
But the following would do exactly that:
Backstack backstack = backstackDelegate.getBackstack(); // lifecycle integration
backstack.setHistory(HistoryBuilder.from(backstack)
.removeLast()
.add([key of fragmentA(new)])
.build(),
StateChange.REPLACE);
You might also find removeUntil()
helpful on the HistoryBuilder
.
Then again, this use-case:
fragmentB, finishes or closes and passes data to another instance of fragmentA
fragmentA(old) will be closed and replaced with fragmentA(new) to imitate that the view has been updated through the use of fragmentB
I did run into this and unless you want to update the arguments bundle, you can use a MessageQueue
of sorts as you can see in the mvvm-sample which you can see is used here
from simple-stack.
Thank you very much! I'll try the MessageQueue
solution when I have more time on my hands
from simple-stack.
Sorry another question, how do I get the currently displayed fragment using BackStack?
from simple-stack.
uh, that is the responsibility of the StateChanger. Which in my case tends to be the Activity itself.
So to make the Backstack show a given fragment, what you need to do is handle the transition between the previous state and the new state, in this case using the FragmentTransaction
's API. Without calling addToBackStack()
on it, because that changes fragment behavior.
For example, if you only want to show the top fragment, then it is a good choice to detach the ones that are not visible, attach the top, and add it if it's not even in the fragment manager yet.
for(Key oldKey : stateChange.<Key>getPreviousState()) {
Fragment fragment = fragmentManager.findFragmentByTag(oldKey.getFragmentTag());
if(fragment != null) { // already added
if(!stateChange.getNewState().contains(oldKey)) {
fragmentTransaction.remove(fragment); // no longer exists
} else if(!fragment.isDetached()) {
fragmentTransaction.detach(fragment); // it will not be the new top so it can be detached
}
}
}
and
for(Key newKey : stateChange.<Key>getNewState()) {
Fragment fragment = fragmentManager.findFragmentByTag(newKey.getFragmentTag());
if(newKey.equals(stateChange.topNewState())) { // if is top
if(fragment != null) {
if(fragment.isDetached()) {
fragmentTransaction.attach(fragment); // then if exists and is detached, attach
}
} else {
fragment = newKey.newFragment(); // is not added, so add it
fragmentTransaction.add(containerId, fragment, newKey.getFragmentTag());
}
} else {
if(fragment != null && !fragment.isDetached()) { // not top - should be detached
fragmentTransaction.detach(fragment);
}
}
}
It might seem a bit clunky at first but it's actually surprisingly easy to customize, we had a bit more custom behavior to it to define what should be added, hidden, attached, etc.
from simple-stack.
Thank you very much for your help
from simple-stack.
@dev-JE02 I've just checked this question again and I think I might have answered the wrong question?
The answer to checking the current top is just backstack.top()
, then you can access the fragment tag and use findFragmentByTag()
to get the fragment.
from simple-stack.
Related Issues (20)
- Can I Use @styles/Theme.MyComposeTheme on AndroidManifests.xml? HOT 3
- Question: What is the purpose of RegistrationViewModel inside ServiceProvider in extension-compose-example? HOT 4
- What is the proper way to add a key to the top even if it already exists in the backstack? HOT 2
- Publish to MavenCentral instead of just Jitpack.io
- Unable to start activity ComponentInfo{com.xxxxxxxxxx.yyyyyy/com.xxxxxxxxxx.yyyyyy.activities.MainActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment q2.v1: could not find Fragment constructor HOT 7
- How to 'lookup<>()' scoped class from an Android Service HOT 2
- Lazy initialization of ScopedServices HOT 2
- KMM support? HOT 2
- Screen can get the service from wrong scope during back animation HOT 6
- Backstack is not available in a child Fragment's onCreate after process death
- DialogFragment and BottomDialogFragment as part of navigation stack, question HOT 2
- Verify that the new `setParentServices()`'s `lookupFromScope(..., EXPLICIT)` behavior is what is expected
- Updating the Compose example to Compose 1.5.0 requires AGP 8.1
- Should Simple Stack be used in new projects HOT 14
- Crash due to activity.onBackPressed() when removing fragment hosting a WebView in AndroidView {} + FADE HOT 15
- Backstack with espresso HOT 3
- The service does not exist in any accessible scopes HOT 11
- Up navigation examples are hard to find HOT 3
- Consider adding Backstack.services() method as in GlobalServices.services() HOT 4
- Extensions should support Fragment in-app predictive back animations
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from simple-stack.