0

Я очень новичок в андроиде, и мне нужна ваша помощь.Неправильно ли удерживать активность в классе 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 как контекст?

Спасибо.

+0

в 'Fragment' вы можете получить доступ к' Activity' с помощью 'getActivity()' –

+0

да, но в другом классе, как ListView.Adapter не может. что мне делать? –

+0

для адаптера вы можете передать его в качестве параметра –

ответ

0

Для адаптера на фрагменте вы можете:

ArrayAdapter<String> adapter = ArrayAdapter<String>(getActivity(), stringList); 
listView.setAdapter(adapter);