Вызовите метод AsyncTask в ActivityMain из фрагмента. - PullRequest
0 голосов
/ 10 октября 2019

Раньше я слышал, что AsyncTask по основному действию вызывается с помощью:

new SyncGetLocations(ActivityMain.this).execute();

Теперь я переместил его во фрагмент и теперь не знаю, как его вызвать из MainActivity.

AsyncTask похожи:

private static class SyncGetLocations extends AsyncTask<Void, Void, Void> {

    private WeakReference<ActivityMap> activityReference;

    SyncGetLocations(ActivityMap context) {
        activityReference = new WeakReference<>(context);
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected Void doInBackground(Void... voids) {
    }

    @Override
    protected void onPostExecute(Void aVoid) {

    }

}

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Либо

Из MainActivity найдите свой фрагмент:

val фрагмент = getSupportFragmentManager (). FindFragmentByTag (...) или findFragmentByID (...)

и затем вызовите метод в этом фрагменте для запуска asyncTask

fragent.callAsyncTask ()

или

сделайте вашу асинктасу общедоступнойили удалите его из фрагмента, чтобы он был его собственным классом, и назовите его везде, где вам захочется

Я предлагаю вам сделать asyntask не внутренним классом фрагмента деятельности, который вы хотите вызывать из любого места

0 голосов
/ 10 октября 2019

Попробуйте присоединить Listener к вашему фрагменту с помощью метода, подобного

public interface FragmentInteractionListener{ 
void onClick(); 

}

В вашем фрагменте

private FragmentInteractionListener fragmentListener;

@Override
public void onDetach() {
    super.onDetach();
    fragmentListener = null;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof FragmentInteractionListener) {
        fragmentListener = (FragmentInteractionListener) context;
    }  else {
        throw new RuntimeException(context.toString()
                + " must implement FragmentInteractionListener");
    }
}

И при событии onClick вызовите его следующим образом

fragmentListener.onClick();

Затем в своей деятельности реализуйте FragmentInteractionListener

ИЛИ

 ((SomeActivity)getActivity()).someMethod();
...