2016-06-27 16 views
1

ビューポートに2つのタブがあります。したがって、フラグメント1では、テキストを入力し、タブ2を選択すると、フラグメント2はフラグメント1からそのテキストのデータを取得します。Xamarin Androidのタブ間でデータを渡す方法は?

例:私はtab1を開く - >私はテキストを入力する "abcd" - >私はtab2を開く - >私はテキストを取得したいと思うabcd 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(); 

    } 
} 

私はそれを試してみましたが、結果を持っていません。

+0

はい]を参照してください。そのヌルを取得 –

答えて

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

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

optionaly他のフラグメントの作成に2つの断片を直接通信することはありませんし、開発者のウェブサイトから活動

を介して通信する必要があります。多くの場合、

あなたがします1つのフラグメントが別のフラグメントと通信するようにしたい場合は、 の変更例コンテンツはユーザイベントに基づいています。すべて フラグメントとフラグメントの通信は、関連付けられた アクティビティを通じて行われます。 2つのフラグメントは決して直接通信するべきではありません。

thisthis

+0

結果を持っていない –

+0

あなたは精巧にできませんでしたか? –

+0

'バンドルバンドル= this.Arguments; txtv.Text = bundle.GetString( "key"); '。 this.Argumentsは、あなたがそうでなければナビゲートすることは、それがnullになるときだから我々は、ナビゲーション せずにデータを渡すことはできません –

関連する問題