Какой файл использует расширение .md и как мне их редактировать?

Подход с общими предпочтениями бесполезен, и класс приложения не имеет доступа к активности.

Другой вариант, который я использовал, - иметь экземпляр сохраненного фрагмента и в этом случае намного больше материал может быть выполнен, особенно если вам нужен доступ к основному пользовательскому интерфейсу.

В этом примере я использовал асинтекс в сохраненном фрагменте. Мой AsyncTask имеет обратные вызовы родительской активности. Он гарантированно запускается только один раз для каждого приложения, потому что фрагмент никогда не уничтожается - воссоздается, когда одна и та же деятельность уничтожается - воссоздана. Это сохраняемый фрагмент.

public class StartupTaskFragment extends Fragment {

public interface Callbacks {
    void onPreExecute();
    void onProgressUpdate(int percent);
    void onCancelled();
    void onPostExecute();
}

public static final String TAG = "startup_task_fragment";
private Callbacks mCallbacks;
private StartupTask mTask;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    mCallbacks = (Callbacks) activity;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setRetainInstance(true); // this keeps fragment in memory even if parent activity is destroyed

    mTask = new StartupTask();
    mTask.execute();
}

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

private class StartupTask extends AsyncTask {

    @Override
    protected void onPreExecute() {
        if (mCallbacks != null) {
            mCallbacks.onPreExecute();
        }
    }

    @Override
    protected Void doInBackground(Void... ignore) {

        // do stuff here

        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... percent) {
        if (mCallbacks != null) {
            mCallbacks.onProgressUpdate(percent[0]);
        }
    }

    @Override
    protected void onCancelled() {
        if (mCallbacks != null) {
            mCallbacks.onCancelled();
        }
    }

    @Override
    protected void onPostExecute(Void ignore) {
        if (mCallbacks != null) {
            mCallbacks.onPostExecute();
        }
    }
}
}

Затем в основном (или родительском) действии, где вы хотите, чтобы этот фрагмент запуска запуска выполнялся один раз.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FragmentManager fm = getFragmentManager();
    StartupTaskFragment st = (StartupTaskFragment) fm.findFragmentByTag(StartupTaskFragment.TAG);

    if(st == null) {
        fm.beginTransaction().add(mStartupTaskFragment = new StartupTaskFragment(), StartupTaskFragment.TAG).commit();
    }

    ...
}

Идеи для сохраненного фрагмента пришел отсюда: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html . Я просто вычислил его другие варианты использования, кроме изменений конфигурации.

843
задан entpnerd 24 January 2016 в 07:33
поделиться