【问题标题】:Initializing a Loader in an Activity在 Activity 中初始化 Loader
【发布时间】:2012-04-12 16:30:33
【问题描述】:

我目前正在尝试学习如何使用加载器,但在我的活动中启动加载器时遇到了问题。

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 给出了一个错误说明:

方法initLoader(int, Bundle, LoaderManager.LoaderCallbacks) LoaderManager 类型中的参数不适用于参数 (int, null, ActivitySwitchActivity)

谁能帮忙解决我哪里出错了?

【问题讨论】:

    标签: android android-loadermanager


    【解决方案1】:

    我可以看到您使用 supportV4 库。 所以要实现 Loader 你应该做一些事情:

    1. 从 FragmentActivity 类扩展您的活动
    2. 使用 getSupportLoaderManager 方法代替 getLoaderManager

    这里是示例代码:

    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();
    }
    }
    

    【讨论】:

    • 如果你原来扩展ListActivity怎么办?没有像 FragmentListActivity 这样的东西可以作为替代品。
    • @MattHuggins ListActivity 主要是为极少数事情提供便利——您可以自己实现缺少的功能(将 ListView 保留为字段)
    【解决方案2】:

    当使用带有fragments 的加载器时,使用:

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

    当使用 Activity 的加载器时:

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

    【讨论】:

      【解决方案3】:

      getLoaderManager().initLoader(0, null, this);的第三个参数应该是实现接口LoaderManager.LoaderCallbacks的实例 所以你应该先实现接口。

      【讨论】:

      • 对不起,我之前没有发布完整的代码,只是摘录。 LoaderManager.LoaderCallbacks 接口是什么意思?它们会是 onCreateLoader、onLoadFinished 和 onLoaderReset 吗?因为我的程序中有它们?
      【解决方案4】:

      对于 AppCompatActivity,使用 getSupportLoaderManager().initLoader(0,null,this); 来初始化加载器。

      【讨论】:

        猜你喜欢
        • 2018-02-05
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2019-12-19
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        相关资源
        最近更新 更多