Статический обработчик фрагментов?

Я прочитал эту статью об использовании статического обработчика. внутренний класс, чтобы избежать утечки памяти.

Я помещаю внутренний класс в активность classBaseActivity, которую расширяют другие действия. Обработчик отлично работает в классах активности:

public abstract class BaseActivity extends AppCompatActivity {

    public Handler handler = new StaticHandler(this);

    public static class StaticHandler extends Handler {

        private final WeakReference<BaseActivity> mActivity;

        public StaticHandler(BaseActivity activity) {
            mActivity = new WeakReference<BaseActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            BaseActivity activity = mActivity.get();
            if (activity != null) {
                // ...
            }
        }
    }
}

Если я хочу использовать обработчик во фрагменте, можно ли вызвать StaticHandler из базовой активности? Я не могу найти способ сделать это. Должен ли я создать еще один статический обработчик в классе фрагментов? Лучше ли передать handler из BaseActivity во фрагмент вместо создания нового во фрагменте?

public class SomeFragment extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             final Bundle savedInstanceState) {

           Runnable runnable = new Runnable(){....};
           Handler handler = new BaseActivity.StaticHandler(getActivity()); // It won't work because the getActivity() doesn't match BaseActivity 
           handler.post(runnable)


    }
}

person RedGiant    schedule 29.06.2016    source источник


Ответы (1)


Поскольку BaseActivity расширяет AppCompatActivity, поэтому передайте AppCompatActivity Context из фрагмента как:

Handler handler = new BaseActivity.StaticHandler((BaseActivity)getActivity());

Также в BaseActivity инициализируйте handler объект внутри любого метода, а не на уровне класса.

person ρяσѕρєя K    schedule 29.06.2016