2016-11-20 2 views
1

Я использую AsyncTaskLoader для загрузки данных в ArrayList, исходящий из HTTPRequest. После загрузки данные отображаются через список ресайклеров в виде списка. Когда я нажимаю на элемент списка, активируется действие B, показывающее подробный экран для этих данных. Затем у меня есть две возможности вернуться к списку, одна из них - с помощью кнопки «Назад» (телефон), а другая - с помощью кнопки «вверх» < - на панели инструментов, так как у него есть android.support.PARENT_ACTIVITY.Наверх перезагрузка загрузчика, но назад навигация не

Ну, кнопка «Назад» не запускает загрузчик, но кнопка «Upbutton» перезагружает все это. Что происходит? Я хочу, чтобы и то и другое, то есть не перезагружалось, как я указываю в onStartLoading().

Это мой AsynTask загрузчик, который называется, как обычно, путем реализации интерфейса

public class FallaLoader extends AsyncTaskLoader<List<Falla>> { 
private String mUrl; 
private List<Falla> mFalla; 

FallaLoader(Context context, String url) 
{ 
    super(context); 
    mUrl = url; 
} 
@Override 
protected void onStartLoading() 
{ 
    if (mFalla == null) { 
     // we have no data, so kick off loading 
     forceLoad(); 
    } 
    else { 
     // use cached data, fallas won't change for a year, so... just needed everytime I start 
     deliverResult(mFalla); 
    } 
} 

// This happens in the Background thread 
@Override 
public List<Falla> loadInBackground() 
{ 
    if (mUrl == null) 
    { 
     return null; 
    } 
    // Perform the network request, parse the response, and extract a list of earthquakes. 
    // pass the context since it will be needed to get the preferences 
    return Utils.fetchFallasData(mUrl, getContext()); 
} 

@Override 
public void deliverResult(List<Falla> data) 
{ 
    // We’ll save the data for later retrieval 
    mFalla = data; 
    super.deliverResult(data); 
}} 

LoaderCallbacks<List<T>> В onCreate от активность А, у меня есть вызов ПОГРУЗЧИК как это

`LoaderManager loaderManager = getLoaderManager(); loaderManager.initLoader (0, null, this);

, а затем, я реализовать интерфейс:

@Override 
public Loader<List<Falla>> onCreateLoader(int i, Bundle bundle) 
{ 
    return new FallaLoader(this, F_URL); 
} 

@Override 
public void onLoadFinished(Loader<List<Falla>> loader, List<Falla> fallas) 
{ 
    View loadingIndicator = findViewById(R.id.loading_indicator); 
    loadingIndicator.setVisibility(View.GONE); 
    mEmptyStateTextView.setText(R.string.no_fallas); 

    if (fallas != null && !fallas.isEmpty()) 
    { 
     adapter.swap(fallas); 
    } 
} 

@Override 
public void onLoaderReset(Loader<List<Falla>> loader) { 

} 

`

Спасибо!

+0

Отправьте основное занятие, в котором находитесь обработка данных и кнопка возврата. – mallaudin

ответ

1

Когда вы вернетесь из activity B, onStartLoading будет называться снова Загрузчик знает о деятельности states.Now при нажмите кнопку назад из телефона, деятельность будет просто доведена до фронта, но если вы нажмите кнопку назад в панели, предыдущая деятельность будет создана снова, следовательно, ваш погрузчик будет реиницилизирован и if (mFalla == null) станет истинным, в результате вызова forceLoad().

Чтобы избежать этого, вы можете обращаться с кнопкой обратной ссылки на панели инструментов в activity B.

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(item.getItemId() == android.R.id.home){ 
      onBackPressed(); 
     } 
     return true; 
    } 
Смежные вопросы