Divakar13 Ответов: 1

Как очистить ресурсы, используемые фрагментом, пока мы уничтожаем активность?


For example, I have added the TextView inside the fragment as below.

        var adaptor = new GenericFragmentPagerAdaptor(SupportFragmentManager); // where GenericFragementPagerAdaptor is a sub-class derived from FragementPagerAdaptor

        adaptor.AddFragmentView((i, v, b) => {
            var view = i.Inflate(Resource.Layout.tab, v, false);
            textView = new TextView(view.Context);
            textView.Text = "Test1";
            view.FindViewById<FrameLayout>(Resource.Id.mainFrame).AddView(textView);
            return view;

If I am destroying the current activity means, all the resources related to the fragment should be cleared.Where and how can I do that? Please, anyone suggests me.


Что я уже пробовал:

Я попробовал с помощью приведенных ниже методов переопределения OnDestroyView() и OnDetach() в классе Fragment

этот.FragmentManager.Фрагментарный.Четкий();

Но это не сработало.

1 Ответов

Рейтинг:
2

David_Wimbley

Если я понимаю, о чем вы спрашиваете, я думаю, что вы хотите использовать IDisposable интерфейс, который будет обрабатывать очистку ресурсов для вас.

Ваше использование использовав IDisposable будет тогда


using(var adaptor = new GenericFragmentPagerAdaptor(SupportFragmentManager))
{

        adaptor.AddFragmentView((i, v, b) => {
            var view = i.Inflate(Resource.Layout.tab, v, false);
            textView = new TextView(view.Context);
            textView.Text = "Test1";
            view.FindViewById<FrameLayout>(Resource.Id.mainFrame).AddView(textView);
            return view;
		});
}


Делая это таким образом, все, что находится за пределами с помощью(){} будет автоматически очищен процессом удаления мусора.

Примером реализации IDisposable может быть что-то вроде этого:

public class MyClass : IDisposable
{
   private bool Disposed { get; set; }

   public void Dispose()
   {
      this.Dispose(true);
      GC.SuppressFinalize(this);
   }
   
   protected virtual void Dispose(bool disposing)
   {
      if (!this.Disposed)
      {
         if (disposing)
         {
            // do your code cleanup here to free resources and what not
         }
      }

      this.Disposed = true;
   }
}


//usage

using(var cl = new MyClass())
{
   //Run some code using the class here
}

// Disposable method has been run at this point