2017-02-27 23 views
0

Hyのみんな、フラグメントXamarinのAndroid

私はフラグメントが、そのいけない作業を交換しようとしている...私は、活動を持っているこの活動の内側に私は2つのボタンとのLinearLayoutを持っている、と私は多くの断片を交換したいですそのLinearLayoutで、NextとPreviuosというボタンを使って、最初のフラグメント作業は、2番目の作業はしません。

誰かがこれを行う方法を教えてもらえますか?

活動

ing System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Android.Support.V7.App; 
using Uer.Fragments.FragmentsRegister; 

namespace Uer 
{ 
    [Activity(Label = "Register", Theme = "@style/NoActionBar")] 

    public class RegisterActivity : AppCompatActivity 
    { 

     private LinearLayout lnlContainerRegister; 
     private Button btnNext; 

     protected override void OnCreate(Bundle savedInstanceState) 
     { 
      base.OnCreate(savedInstanceState); 

      // Create your application here 
      SetContentView(Resource.Layout.RegisterActivity); 

      lnlContainerRegister = FindViewById<LinearLayout>(Resource.Id.lnlContainerRegister); 
      btnNext = FindViewById<Button>(Resource.Id.btnNext); 

      cpfFragment(); 

      btnNext.Click += BtnNext_Click; 
     } 

     private void BtnNext_Click(object sender, EventArgs e) 
     { 
      emailFragment(); 
     } 

     void cpfFragment() 
     { 

      var transaction = SupportFragmentManager.BeginTransaction(); 
      transaction.Add(Resource.Id.lnlContainerRegister, new CPF(), "CPF"); 
      transaction.Commit(); 

     } 

     void emailFragment() 
     { 
      var transaction = SupportFragmentManager.BeginTransaction(); 
      transaction.Add(Resource.Id.lnlContainerRegister, new Email(), "Email"); 
      transaction.Commit(); 
     } 
    } 
} 

CPF断片

sing System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Util; 
using Android.Views; 
using Android.Widget; 
using Android.Support.V4.App; 

namespace Uer.Fragments.FragmentsRegister 
{ 
    public class CPF : Fragment 
    { 
     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 
      View view = inflater.Inflate(Resource.Layout.CPFFragment, container, false); 

      return view; 
     } 
    } 
} 

メール断片

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Util; 
using Android.Views; 
using Android.Widget; 
using Android.Support.V4.App; 

namespace Uer.Fragments.FragmentsRegister 
{ 
    public class Email : Fragment 
    { 
     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 
      View view = inflater.Inflate(Resource.Layout.EmailFragment, container, false); 

      return view; 
     } 
    } 
} 

PS:cpfFragmentはnormaly作品!

+0

エラーが表示されますか? –

+0

何も、ちょうど仕事をしないでください:/ –

答えて

1

ActivityLayoutにFrameLayoutを追加してみてください。あなたのsupportFragmentManagerの、代わりの方法の

その後
<FrameLayout 
     android:id="@+id/myFrameLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

、(Replaceメソッドを使用します)は、(追加)。あなたはこのような何か買ってあげる

:このコードで

void cpfFragment() 
     { 

      var transaction = SupportFragmentManager.BeginTransaction(); 
      transaction.Replace(Resource.Id.myFrameLayout, new CPF(), "CPF"); 
      transaction.Commit(); //or CommitAllowingStateLoss 

     } 

を、あなたの活動のでframeLayoutは、フラグメントCPFのビューが含まれています。

次に、電子メールフラグメントに同じコードを呼び出す必要があります.FrameLayoutがクリーンアップされ、電子メールフラグメントのビューが追加されます。

void emailFragment() 
    { 
     var transaction = SupportFragmentManager.BeginTransaction(); 
     transaction.Replace(Resource.Id.myFrameLayout, new Email(), "Email"); 
     transaction.Commit(); //or CommitAllowingStateLoss 
    } 

それが動作するかどうか:)

編集を教えてください:コメントで質問に答える:

をインターフェイスを作成する必要があり、あなたの活動は、それを実装する必要があります。

public interface IChangeFragment 
{ 
    void emailFragment(); 
    void cpfFragment(); 
} 

public class RegisterActivity : AppCompatActivity, IChangeFragment 
{ 
    //... 

    public void emailFragment() 
    { 
     //... 
    } 

    public void cpfFragment() 
    { 
     //... 
    } 
} 

次に、フラグメントはIChangeFragmentタイプのコールバックを使用する必要があります。コールバックは、あなたのフラグメントのONATTACH方法で評価され、あなたの断片からあなたのアクティビティのメソッドを呼び出すことができるようになります。この方法では、それらの断片を使用して、任意の活動を実施しなければならないこと

public class CPF : Fragment 
{ 
     private IChangeFragment m_callBack; 

     public override void OnAttach(Activity activity) 
     { 
      base.OnAttach(activity); 

      try 
      { 
       m_callBack = (IChangeFragment)activity; 
      } 
      catch (ClassCastException) 
      { 
       throw new ClassCastException(activity.ToString() + " must implement IChangeFragment"); 
      } 
     } 

     private void OnButtonClicked(object sender, EventArgs e) 
     { 
      m_callBack.emailFragment(); 
     } 
} 

注意インタフェースIChangeFragmentそうでない場合、ClassCastExceptionが発生します。

+0

男、ありがとうございます...そのちょうど置換を使用して!しかし...私は別の断片の中のボタンで断片を呼びたいのですか? –

+0

ありがとうございました!!! –

関連する問題