web-dev-qa-db-ja.com

アクティビティでのローダーの初期化

現在、ローダーの使用方法を習得しようとしていますが、アクティビティでローダーを起動できません。

import Android.support.v4.app.LoaderManager;
import Android.support.v4.content.Loader;

public class ASwitchActivity extends Activity implements 
             LoaderManager.LoaderCallbacks<SampleLoader.SampleLoaderResult> {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getLoaderManager().initLoader(0, null, this);
    }

    public Loader<SampleLoader.SampleLoaderResult> onCreateLoader(int id, Bundle args) {
      return new SampleLoader(getBaseContext(), account, "dog");
}

  public void onLoadFinished(Loader<SampleLoader.SampleLoaderResult> loader, SampleLoader.SampleLoaderResult out)
  {
      TextView t=(TextView)findViewById(R.id.testTV);
      t.setText("yay");
  }

  public void onLoaderReset(Loader<SampleLoader.SampleLoaderResult> loader){

  }
}   

ただし、Eclipseは次のエラーを表示します。

タイプLoaderManagerのメソッドinitLoader(int、Bundle、LoaderManager.LoaderCallbacks)は、引数(int、null、ActivitySwitchActivity)には適用できません

誰かが私が間違っているところを手伝ってくれる?

28
d.mc2

ご覧のとおり、supportV4ライブラリを使用しています。したがって、ローダーを実装するには、いくつかのことを行う必要があります。

  1. fragmentActivityクラスからアクティビティを拡張する
  2. GetLoaderManagerの代わりにgetSupportLoaderManagerメソッドを使用します

ここにサンプルコードがあります:

import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.app.LoaderManager;
import Android.support.v4.content.Loader;
import Android.widget.Toast;

public class MyActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Object> {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getSupportLoaderManager().initLoader(0, null, this);
}

@Override
public Loader<Object> onCreateLoader(int i, Bundle bundle){
    return null; // TODO
}

@Override
public void onLoadFinished(Loader loader, Object o) {
    Toast.makeText(this, "onLoadFinished", Toast.LENGTH_SHORT).show();
}

@Override
public void onLoaderReset(Loader loader)    {
    Toast.makeText(this, "onLoaderReset", Toast.LENGTH_SHORT).show();
}
}
83
mig35

ローダーをfragmentsで使用する場合は、次のようにします。

getLoaderManager().initLoader(0,null,this);

ローダーをActivityで使用する場合:

getSupportLoaderManager().initLoader(0,null,this);
10
Krishna Agarwal

getLoaderManager().initLoader(0, null, this);の3番目のパラメーターは、インターフェースLoaderManager.LoaderCallbacksを実装するインスタンスにする必要があります。そのため、最初にインターフェースを実装する必要があります。

1
Changwei Yao

AppCompatActivityでは、ローダーの初期化にgetSupportLoaderManager().initLoader(0,null,this);を使用します。

1