2015-02-18 4 views
0

В моем приложении Xamarin.Android (Monodroid) у меня есть одно действие, которое отображает несколько фрагментов из меню в действии. Я хотел бы назначить определенные методы в своей деятельности как обработчики событий для определенных действий в фрагментах в следующем шаблоне.Назначение обработчика события Activity из фрагмента создает циклическую ссылку?

public class MainActivity : FragmentActivity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     // Set our view from the "main" layout resource 
     SetContentView(Resource.Layout.Main); 
     SupportFragmentManager.BeginTransaction().Replace(Resource.Id.mainFrame,new Accountactivity()).Commit(); 
     SupportFragmentManager.ExecutePendingTransactions(); 
    } 
    void MenuClicked(object sender, EventArgs e) 
    { 
    } 
} 
public class AccountFragment : Android.Support.V4.App.Fragment 
{ 
    public override void OnResume() 
    { 
     base.OnResume(); 
     accountMenu.Click += ((MainActivity)Activity).MenuAccountClicked; 
    } 
} 

Будет ли эта модель создать циклическую ссылку на моей деятельности и остановить фрагмент, собираемой сборщиком мусора?

ответ

2

Для этого шаблона вы должны использовать onAttach и onDetach для назначения и удаления обработчиков событий.

Назначить обработчик события onAttach и удалить его onDetach.

+0

Привет, @ jimi312 Я переместлю это в OnAttach и OnDetach. Я делаю это в основном для настройки навигации. Я хочу изменить фрагменты в mainActivity из дочернего фрагмента. Это правильный метод для этого? И мой первоначальный вопрос заключался в том, чтобы создать циклическую ссылку в C#? Ответьте также на это ... – Sreeraj

+1

Пока вы удаляете обработчик событий в onDetach, не должно быть проблем с циклическими ссылками. Я использовал аналогичные шаблоны в прошлом для изменения фрагментов (используя Java, а не C#) без проблем. – jimi312

+0

Спасибо @ jimi312. В Java мы можем безопасно снабжать адаптер ListActivity с помощью ArrayAdapter. Но в C# (когда вы делаете это с monodroid), который создает циклическую ссылку. Вместо этого мы должны реализовать BaseAdapter . Я хотел бы знать, если что-то подобное происходит, когда я подписываюсь на обработчики событий в вышеупомянутом формате, поскольку я пытаюсь вызвать метод в базовом классе фрагмента, вызывающего циклическую ссылку. – Sreeraj