如何在按钮点击时调用Loader?

3
我使用Loader从数据库中加载数据……当我的活动开始时,loader会正确地调用asynctask……但我不知道如何在点击按钮时加载数据!如果“onCreateLoader”在activity启动时自动调用,如何避免呢? 解决方案: 使用FragmentActivity……使用forceload()因为loadInBackground无法工作!使用getSupportLoaderManager()因为getLoaderManager()也无法工作,两者都是因为库给出的问题。但是……我不知道……我并不确定,但是…目前它可以工作!:P
public void onClick(View v) {

    switch(v.getId()){

    case R.id.button:           

        if(getSupportLoaderManager().getLoader(0) == null){
            getSupportLoaderManager().initLoader(0, null, this).forceLoad();
        }else{
            getSupportLoaderManager().restartLoader(0, null, this).forceLoad();
        }
        break;

    case R.id.another:
        Toast.makeText(this, "another", Toast.LENGTH_SHORT).show();
        break;

    }

}

在您的Loader实例上调用forceLoad() - Blundell
但是onCreateLoader将返回myAsyncTaskLoader(),我无法弄清楚如何调用myAsyncTaskLoader(),只有当我点击一个按钮时才能调用。 - arickdev
这对我没用,onContentChanged()也不行。对我有效的是这个:getSupportLoaderManager().restartLoader(0, null, MyActivity.this); - Bevor
1个回答

3

当单击按钮时,只需调用restartLoader

button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        getLoaderManager().restartLoader(YOUR_LOADER_ID, null, mYourLoaderCallbacks);
    }
});

如果您已经有一个加载器,那么就不需要使用asyncTask了。您的加载器的loadInBackground方法默认会异步运行。 - kiruwka
我找到了这个链接:http://stackoverflow.com/questions/16803865/android-loader-vs-asynctask-on-button-tap,这正是我所需要的,但是这个类“AsyncTaskLoaderResult<E>”,我不太理解。 - arickdev
这太复杂了。你可以只使用AsyncTaskLoader<Result>,其中Result是从loadInBackground返回的内容。你可以在我提供的链接中看到正确的做法。希望能帮到你。 - kiruwka
在这个例子中,Activity是一个LoaderCallbacks。只需搜索onCreateLoader并查看其实现方式。而且,不能在没有Callbacks的情况下使用loader。 - kiruwka
当您调用initLoaderrestartLoader时,加载器将启动。只是不要在不希望加载器触发的地方调用initLoader - kiruwka
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接