1

AsyncTaskLoader を使用して、HTTPRequest からの ArrayList にデータをロードしています。ロードされると、データはリサイクラー ビューを介してリストとして表示されます。リストの項目をクリックすると、アクティビティ B がトリガーされ、そのデータの詳細画面が表示されます。次に、リストに戻るための 2 つのオプションがあります。1 つは [戻る] ボタン (電話) によるもので、もう 1 つはavtivity B がandroid.support.PARENT_ACTIVITY実装されているため、ツールバーの [上へ] ボタンによるものです。

まあ、戻るボタンはローダーをトリガーしませんが、上ボタンはすべてをリロードします. 何が起こっている?両方を同じように動作させたい、つまり で指定したようにリロードしないようにしますonStartLoading()

これは、LoaderCallbacks<List<T>>インターフェイスを実装することによって、通常どおり呼び出される私の 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);
}}

onCreateアクティビティ A で、このようなローダーへの呼び出しがあります

`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) {

}

`

ありがとう!

4

1 に答える 1