0

我是 Android 新手,目前开始学习如何使用这个 chrisbanes 库来实现 PullToRefreshListview。你们能解释一下,我应该把我的代码放在哪里来调用API来获取数据,以及在我从API获取数据(图像URL)后我应该设置哪个部分(ImageBitmap)。据我所知,我们应该在后台做一些事情以避免在将图像加载到 UI 时 UI 冻结,但我不确定。请帮忙。

以下是库中的示例代码:请解释一下我应该在 GetDataTask 和 onPostExecute 中做什么。在加载图像的情况下。

@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
    // Do work to refresh the list here.
    new GetDataTask().execute();
}

private class GetDataTask extends AsyncTask<Void, Void, String[]> {

    @Override
    protected String[] doInBackground(Void... params) {
        // Simulates a background job.
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
        }
        return mStrings;
    }

    @Override
    protected void onPostExecute(String[] result) {
        mListItems.addFirst("Added after refresh...");
        mAdapter.notifyDataSetChanged();

        // Call onRefreshComplete when the list has been refreshed.
        mPullRefreshListView.onRefreshComplete();

        super.onPostExecute(result);
    }
}

对不起新手问题,我只是想确认它以遵循标准。对不起,我的英语不好

4

2 回答 2

0

GetDataTask 用于再次调用您的 Web 服务以获取新的列表项。这些事情应该在doInBackground中完成。获得新列表项后,需要在 onPostExecute 中为您的列表视图设置新适配器。

于 2013-05-13T04:09:37.423 回答
0

我认为你应该把你的 GetDataTask 放在一个带有监听器的单独的类中。这是您可以拥有的侦听器示例:

public abstract class RemoteCallListener implements IRemoteCallListener {

@Override
public abstract void onString(String s); //String is just an example.

@Override
public abstract void onError(Exception e);
}

如果您的异步任务,您应该将侦听器提供给您的构造函数。

private class GetDataTask extends AsyncTask<Void, Void, String[]> {

RemoteCallListener listener;
public GetDataTask(){

}

public GetDataTask(RemoteCallListener listener){
this.listener = listener;
}

@Override
protected String[] doInBackground(Void... params) {
    // Simulates a background job.
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
    }
    return mStrings;
}

@Override
protected void onPostExecute(String[] result) {
listener.onString(result);
    // mListItems.addFirst("Added after refresh...");
    // mAdapter.notifyDataSetChanged();

    // Call onRefreshComplete when the list has been refreshed.
    // mPullRefreshListView.onRefreshComplete();

    super.onPostExecute(result);
    }
}

要进行调用的实例,您应该执行类似的操作

 GetDataTask task = new GetDataTask(yourlistener);
 task.execute("your link");

在您的“控制器”类中,您应该创建一个 RemoteCallListener 实例,并在调用 onString 时:

   mListItems.addFirst("Added after refresh...");
    mAdapter.notifyDataSetChanged();

    // Call onRefreshComplete when the list has been refreshed.
    mPullRefreshListView.onRefreshComplete();

您还可以通过 android 的 Dialogs 类冻结 UI。这里给出一个例子:

public final static ProgressDialog showLoading(Context c, String title,
        String message, boolean indeterminate) {
    ProgressDialog p = new ProgressDialog(c);
    p.setTitle(title);
    p.setMessage(message);
    p.setCancelable(false);
    p.setIndeterminate(indeterminate);
    if (!indeterminate) {
        // p.setProgressDrawable( c.getResources().getDrawable(
        // R.drawable.progress ) );
        p.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        p.setProgress(0);
        p.setMax(100);
    }
    p.show();
    return p;
}

但不要忘记关闭您的对话框!

如果您有其他问题可以随时联系我

于 2013-05-13T02:55:59.010 回答