join starbuck
join starbuck

Reputation: 7

How to pass data between tabs on Xamarin Android?

I have two tabs in viewpager. So in fragment1 I input a text and when in tab2 is selected and then fragment2 will get data from that text from fragment1.

ex: when I open tab1 -> I input a text is "abcd" -> I open tab2 -> I want to get a text is "abcd" from tab1(fragment1).

public class Fragment1 : Android.Support.V4.App.Fragment
{
    Fragment2 frag2 = new Fragment2();
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);

        Singleton singleton = Singleton.GetInstance();;
        singleton.SetSource("abcd");

    }

}public class Singleton
    {
        private static Singleton singleton;

        string a = null;
        private Singleton()
        {

        }

        public static Singleton GetInstance()
        {
            if (singleton == null)
                singleton = new Singleton();
            return singleton;
        }
        public void SetSource(string text)
        {
            this.a = text;
        }

        public string showMessage()
        {
            return a;
        }


    }
public class Fragment2 : Android.Support.V4.App.Fragment
{
    public List<string> data = new List<string>();
    public void add(string t)
    {
        data.Add(t);
    }
    TextView txt;
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here


    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        // Use this to return your custom view for this Fragment
        // return inflater.Inflate(Resource.Layout.YourFragment, container, false);

        //return base.OnCreateView(inflater, container, savedInstanceState);
        return inflater.Inflate(Resource.Layout.view2, container, false);
        txt = View.FindViewById<TextView>(Resource.Id.txtgetdata);
        if (data != null)
        {
            txt.Text = data[0];
        }
        else
            Toast.MakeText(Application.Context, "no", ToastLength.Long).Show();

    }
}

I have tried it but don't having the result.

Upvotes: 1

Views: 920

Answers (2)

Gideon Huyo-a
Gideon Huyo-a

Reputation: 61

After a few hours of research/test & debugging and solved, try this out.

  1. In your Activity

    • add public string tabFragment { get; set; }
  2. In your source fragment

    • ie on click or that navigate to other fragment
string tab = ((ActivityUser)Activity).tabFragmentAddUser;
FragmentAddUser fragment = (FragmentAddUser); 
Activity.SupportFragmentManager.FindFragmentByTag(tab);
fragment.setValText("Hello");
viewPager.SetCurrentItem(1, true);
  1. In your destination fragment (ie which elements will be modified)
    • add a method like this

public void setValText(string str) { txtUsrFirstName.Text = str; }

==================================================================

Upvotes: 1

Athul Harikumar
Athul Harikumar

Reputation: 2491

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.SetArguments(bundle);

in on create of the other fragment

Bundle bundle = this.GetArguments();
int myInt = bundle.GetInt(key, defaultValue);

optionaly two fragments should never communicate directly and should communicate through activity

From Developers website:

Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.

refer this and this

Upvotes: 0

Related Questions