How to send data from one Fragment to another Fragment?
Asked Answered
O

4

29

Hi I know there are answers of this question. I have tried all of them but it is not working in my app. I am developing an app that has 3 Fragment activity. First fragment shows a website, second fragment has listview and third Fragment has another listview. Now I want to send URL from third fragment to first fragment when user clicks on listitem..This is what I have done.

I am sending string url from this Fragment to first fragment.

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view, int position,
            long id) {
        FragmentC fragment = new  FragmentC();
        final Bundle bundle = new Bundle();
        bundle.putString("position", "http://www.facebook.com");            fragment.setArguments(bundle);}
});

This is first fragment where I need the url and Want to show in the webview.

String url="http://www.hotelsearcher.net/";
        Bundle args = getArguments();
        if (args  != null){
        url = args.getString("position");
        }
        WebView webView= (WebView) V.findViewById(R.id.webView1);
        WebSettings webViewSettings = webView.getSettings();
        webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webViewSettings.setJavaScriptEnabled(true);
        webViewSettings.setPluginState(PluginState.ON);
        webView.loadUrl(url);

When I click on list item I don't see anything . It does not redirect me to the first fragment.Please help me..

Oxygenate answered 3/7, 2014 at 13:45 Comment(0)
H
93

Use Bundle to send String:

//Put the value
YourNewFragment ldf = new YourNewFragment ();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
ldf.setArguments(args);

//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

In onCreateView of the new Fragment:

//Retrieve the value
String value = getArguments().getString("YourKey");
Hotel answered 3/7, 2014 at 13:49 Comment(13)
what do you mean by YourNewFragment ?Oxygenate
Is your "Another fragment". Is the fragment you want to receive the String value.Serviceable
what does the container refer to?Oxygenate
Is the id declared in your activity xml file. android:id="@+id/container"Serviceable
ok..It works..It redirects to the first Fragment.But it is showing Dialog to choose a broswer to view the website rather than showing the website on my webview..Can you help me on this.I will accept the answer.:)Oxygenate
please close this question and open another one with the new question. I try to help you in the new question.Serviceable
I have accepted the answer..I cant post another question in 90 minutes.I need this done urgent. Can you please help me here.. I promise I will post another question and let you know and accept your answer if my problem is solved.Oxygenate
say here in comments what is the problemServiceable
try to put this in webview: myWebView.setWebViewClient(new WebViewClient());Serviceable
Great ..:) thank you..It works.. I will post any another question and let you know..Oxygenate
please, send-me a comment here before post the questionServiceable
Now probably you can post you new question. Please do it and let me do the answer.Serviceable
#24558923 this is the question.Oxygenate
S
5

1.If fragments are hosted by same activity- You cannot cast an intent to Fragment. Fragment acts as a part of Activity, it is not an activity by itself. So to share a string between fragments you can declare a static String in Activity. Access that string from Fragment A to set the value and Get the string value in fragment B.

2.Both fragments are hosted by different Activities- Then you can use putExtra to pass a string from Fragment A of Activity A to Activity B. Store that string in Activity B and use it in Fragment B.

Sims answered 3/7, 2014 at 13:56 Comment(2)
I have different Fragment and I want to send String from Fragment to another fragment.Oxygenate
yes, understood but that Both fragments are hosted by Same Activity??Sims
C
2

You have to attach your bundle to your fragment.

fragment.setArguments(bundle);

and after that change or replace the new fragment.

You have to be sure that the String is in the new Fragment. Debugging!!

Chuu answered 3/7, 2014 at 13:51 Comment(0)
B
0

You can send data by two ways First when you want to start that fragment while sending data

SecondFragment ldf = new SecondFragment ();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
ldf.setArguments(args);

//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container, ldf).commit();

Second, when you want to send data without open your fragment

FragmentTransaction ft = mFragmentManager.beginTransaction();
ft.add(R.id.fragContainer1, new ModelListFragment(), FRAG_MODEL_LIST);
ft.add(R.id.fragContainer2, new TrimListFragment(), FRAG_TRIM_LIST);
ft.commit();

Fragment fragment = mFragmentManager.findFragmentByTag(MainActivity.FRAG_MODEL_LIST);
Log.d("MY", "found fragment: " + (fragment != null));
Benue answered 24/12, 2014 at 6:20 Comment(1)
How do I receive the data in the second fragment?Consulate

© 2022 - 2024 — McMap. All rights reserved.