0

숨바꼭질 모두, 나는 단편하지만 해달라고 작업을 대체하려고조각 자 마린 안드로이드

... 나는 활동이이 활동 안쪽에 난 두 개의 버튼과의 LinearLayout을 가지고 있고, 나는 많은 조각을 교체하려면 그 LinearLayout 버튼을 사용하여 다음과 Previuos, 첫 조각 작업,하지만 두 번째 나던 작동하지 않습니다.

누군가이 방법에 대해 설명해 주시겠습니까?

활동

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을 추가하십시오.

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

그런 다음 Add() 메서드 대신 supportFragmentManager의 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

Thanks Again !!! –

관련 문제