Showing a particular fragment via intent call - android

I know we can move between activities via an intent call. But is there a way to move from one activity to a particular fragment hosted by an activity? For example if I have an activity A which hosts 2 fragments f1 and f2,is there a way to move from another activity say B to fragment f2 directly via intent call?
Thanks in advance.

hmm it is not possible directly via intent call, you will have to start activity A and via an extra/bundle in intent you can specify to activity A to open fragment f2, meaning you will have to write the logic yourself... not possible directly .. Cheers
Try this in Activity B it will open ActivityA and its sending a string which you can check in that activity, based on that string you will add fragment:
Intent i = new Intent(this, ActivityA.class);
i.putExtra("toOpen", "fragment 1");
startActivity(i);
and in ActivityA oncreate
Bundle extras = getIntent().getExtras();
String toOpen = extras.getString("toOpen");
check toOpen string and open appropriate fragment..
Are you asking how to show/add fragments as well , because thats a complete new ball game :) but this would be a nice starts for managing fragments http://developer.android.com/guide/components/fragments.html

When u open a fragment from a activity on a button click the
write this code
Fragment myfragment;
myfragment = new Your_Fragment_Name();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.add(R.id.container, myfragment);
fragmentTransaction.commit();
In my code an id is used: container. This is the id of layout in which Fragment is open.
if u also send a value from activity to with the fragment then
Bundle bundle = new Bundle();
bundle.putInt("value",value );
and
myfragment.setArguments(bundle);
this line is add after create the FragmentManager object
This code is very helpful

Related

Move from one Fragment inside Activity to another Fragment inside Activity

So I have Activity A with Fragment A.1, and I also have Activity B with Fragment B.1.
What I want to ask is, how do I move directly from Fragment A.1 to Fragment B.1?
I know to move from Fragment A.1 to Activity B, is by:
Intent i = new Intent (getActivity (), MainActivity.class);
startActivity (i);
getActivity ().finish();
But how to move straight to Fragment B.1?
Each Activity A and Activity B has a different <FrameLayout> for Fragment replacement
UPDATE 1.0
I've tried my own way and also the way #cewaphi answered with code like this,
In Activity A:
Intent i = new Intent(TransactionDone.this, MainActivity.class);
i.putExtra("immediatelyTransactionToFragment", true);
startActivity(i);
finishAffinity();
In Activity B:
boolean shouldTransitionToFragment = getIntent().getBooleanExtra("immediatelyTransationToFragment", true);
if (shouldTransitionToFragment) {
Fragment fragment = new Wallet();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mainFrameLayout, fragment);
transaction.commit();
Log.d("DEBUGGING REDIRECT", "Go to Fragment B.1");
}
The log "Go to Fragment B.1" was created but the transaction doesn't work
When using a single activity and e.g. using the navigation component is not an option.
Consider the following:
In your fragment A.1 when starting the activity store a Boolean
i.putExtra("immediatelyTransationToFragment", true);
In activity B
shouldTransitionToFragment = getIntent().getBooleanExtra("immediatelyTransationToFragment");
// after activity was created
if (shouldTransitionToFragment) {
// Execute the transition action as you would when pressing the button
}
Update 2020/09/07
You are trying to transition to a Fragment from your Activity like this:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mainFrameLayout, fragment);
transaction.commit();
The documentation states that you should first add the fragment to the activity:
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
Apparently your transition works when you click your button. Are you doing it the same?
But I assume at that time the activity has already been created.
Try once to add your fragment instead of replace. I don't know how your container is initialised but adding might be the operation you want, I refer to this good answer for clarification.
Also consider to perform to call this transaction after your activity was created.

Multiple Fragment To Single Actitvity

I don't know how to express this, but the idea was I have a Navigation Drawer that will call (Intent an Activity) and that Activity will automatically replace the content base from the NavigationView link click.
So from my MainActivity -> ReadActivity (Activity call other Activity) and replace the ReadActivity content with the topic click from the NavigationView .
This code I use for replacing:
LayeringViewer layeringViewer = new LayeringViewer();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.layer_frame_layout,layeringViewer);
ft.commit();
I know how to place a fragment. But how can I do this while calling other Activity? Passing the Fragments like Bundles.
if you want to change the content according to selection from drawer, then pass data on drawer close to activity and according to that replace fragments
Ex:
Fragment fragment = new SupportFragment();
Bundle args = new Bundle();
args.putInt(SupportFragment.ARG_NAME, name);
args.putString("screenfrom", screenfrom);
fragment.setArguments(args);
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
You cannot pass fragments in bundles, you can however send extras with your intent and in the receiving activity get the intent and replace the fragment container with a fragment based on the value of the intent.

How to transfer control from one activity to fragment of another activity in android studio?

How to transfer control from one activity to fragment of another activity in android studio. For example I have activity A and B. Activity B had 2 fragments f1,f2. How to transfer control from A to f2?
pass some intent flag from first activity to second activity and in second activity use of getIntent() check the type of flag with the help of that flag open desired fragment.
Just add this code in your Activity B in onCreate()
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, new f2());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Now,simply use explicit intent to go to Activity B from Activity A,
Intent intent=new Intent(ActivityA.this,ActivityB.class);
startActivity(intent);

How to intent from activity to specific fragment?

I want to send an intent from one activity to a specific fragment like this picture, and fragment is in the fragmentactivity (fragmentactivity includes five fragments). I don't have any idea to implement it.
I don't exactly know what do you mean by "to intent from activity to specific fragment". So I just assume you want to show/navigate to your fragment in your activity. Here's the simple code:
//show your fragment inside your activity
YourFragment fragment = new YourFragment();
getIntent().putExtra("KEY", "Value"); //pass data to your fragment
transaction = this.getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.IDofYourLayoutToBeReplaced, fragment);
transaction.commit();
//in your fragment, retrieve the data
String yourVariable = getActivity().getIntent().getExtras().getString("KEY");
or to better understand, you can check this link

Pass data between two fragments in same activity and update WebView

Hello I'm trying to pass a String value from a fragment to another one. I have a single Activity.
The thing that I'm trying to do is when a listview item is pressed send the value to the another fragment, load the fragment (This I had made with this code):
Fragment cambiarFragment = new FragmentInterurbanos();
Bundle args = new Bundle();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction
.replace(R.id.container, cambiarFragment)
.addToBackStack(null)
.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
// Commit the transaction
transaction.commit();
And then retrieve the String and update a WebView placed in the new fragment (This method cannot be launched when the user select in NavigationDrawer this section (Fragment).
Thanks for your help in advance!
There are many ways you can achieve this... you could pass the string to the new Fragment through a Bundle like this:
Bundle bundle = new Bundle();
bundle.putString(key, value);
fragment.setArguments(bundle);
or maybe have a DataController class where you store the string and the new fragment retrieves it.

Categories

Resources