我的应用有一个NavigationDrawer活动,可根据选择交换片段。其中一个片段包含带有几个按钮的列表视图。 listview项目本身是不可选择的,但我需要处理按钮点击,我能够在我的自定义适配器中成功捕获。
这是我的问题:某些按钮点击需要触发异步任务来调用REST api urls。我不知道该怎么做。我尝试在我的片段上调用静态方法来实例化私有类的实例(扩展AsyncTask),但这不起作用。我想在我的自定义适配器中创建一个从AsyncTask扩展的私有类,但这感觉不对。做这样的事情的正确方法是什么?
答案 0 :(得分:1)
与其他任何地方的Async任务不同。看一下文档
http://developer.android.com/intl/es/reference/android/os/AsyncTask.html
为您的任务创建一个类
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
然后在onClick事件中创建它的实例
new DownloadFilesTask().execute(url1, url2, url3);
答案 1 :(得分:0)
这是扩展Asynctask
的类public class webservice extends AsyncTask<Object, Object, Object>{
private Context c;
public webservice(int mode)
{
}
public void set_context(Context c)
{this.c =c;
}
public void call_webservice_login()
{
// procedure to call webservice etc...
}
@Override
protected Object doInBackground(Object... arg0) {
// TODO Auto-generated method stub
call_webservice_login();
return 0;
}
protected void onProgressUpdate(Integer... progress) {
//update your UI, etc
}
protected void onPreExecute(){
super.onPreExecute();
pgd = new ProgressDialog(c);
pgd.setMessage("Loading...");
pgd.show();
}
protected void onPostExecute(Object result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
你可以这样称呼它。
webservice wb1 = new webservice(1);
//wb1.set_context(this);
wb1.execute();
答案 2 :(得分:0)
为了拥有功能齐全的ListView
,您需要适配器。
所以,这里最好的方法是:
OnClickListener
。getView()
方法中,将侦听器添加到必须执行任何操作的按钮:myButton.setOnClickListener(mListener)
。myView.setTag(Object)
向getView()
方法中的按钮添加一些标记或对象。监听器在调用时会收到View
参数,这是单击的视图。只需在侦听器代码中使用view.getTag()
即可确定按下了哪个按钮。