我是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);
}
}
很抱歉新手问题,我想确认它是为了遵循标准。抱歉我的英文不好
答案 0 :(得分:0)
我认为你应该将GetDataTask放在一个带有Listener的独立类中。这是您可以拥有的监听器示例:
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");
在你的'controller'类中,你应该创建一个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;
}
但别忘了关闭你的对话!
如果您有其他问题,可以随时与我联系
答案 1 :(得分:0)
GetDataTask用于再次调用您的Web服务以获取新的列表项。这些事情应该在doInBackground中完成。获得新列表项后,需要在onPostExecute中为列表视图设置新适配器。