Я очень новичок в андроиде, и мне нужна ваша помощь.Неправильно ли удерживать активность в классе Singleton?
Мне любопытно, что я делаю правильно или нет.
Мое приложение имеет только одну активность (MainActivity It's AppCompatActivity кстати).
Но вместо этого я использую несколько фрагментов.
Некоторые фрагменты содержат объект (я называю его ProblemClass), который должен иметь Activity (не Context хотя).
Такие, как адаптер ListView (или что-то подобное), чтобы раздуть Layout
или диалогового окна, которые должны надуть Layout и нужно, чтобы создать контекст AlertDialog.Builder.
И это (ProblemClass) не может вызвать getActivity().
У меня есть два решения.
1.Pass Activity to ProblemClass.
2.Holding Activity в Singleton для использования в любом приложении класса.
Я выбрал последний. Но ...
Я где-то читал, что это может привести к утечке памяти, не так ли?
Поскольку Singleton-Object существует весь срок службы приложения.
.
.
Это мой Синглтон, на котором действует Activity.
Я вызываю setMyActivity (MainActivity.this) в onCreate() в MainActivity, чтобы передать его Singleton.
public class MyActivitySingleton
{
private AppCompatActivity mAppCompatActivity;
private MyActivitySingleton()
{
}
private static class MyActivitySingletonHolder
{
private static final MyActivitySingleton INSTANCE = new MyActivitySingleton();
}
public static MyActivitySingleton getInstance()
{
return MyActivitySingletonHolder.INSTANCE;
}
public AppCompatActivity getMyActivity()
{
return this.mAppCompatActivity;
}
public void setMyActivity(AppCompatActivity appCompatActivity)
{
this.mAppCompatActivity = appCompatActivity;
}
}
Любое предложение? Что мне нужно сделать?
Передача активности в ProblemClass и, если требуется, контекст. Он также может использовать Activity как контекст?
Спасибо.
в 'Fragment' вы можете получить доступ к' Activity' с помощью 'getActivity()' –
да, но в другом классе, как ListView.Adapter не может. что мне делать? –
для адаптера вы можете передать его в качестве параметра –