我遇到自定义微调器的问题。实际上,我通过查询加载一个微调器,并且使用特定的Asynctask。 在asynctask之后我应该调用方法setOnItemSelectedListener()但是不起作用:当我启动应用程序时,该方法没有被调用。 我不明白我错在哪里......你能帮助我吗?
这是我的代码:
//other code
if (firstpopulate)
{
new LoadSpinnerJobs().execute();
firstpopulate = false;
}
drawerHolder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3)
{
// do work
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
//other code
public class LoadSpinnerJobs extends AsyncTask<Void, Void, List<SpinnerItem>>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
userList = new ArrayList<SpinnerItem>();
setProgressBarIndeterminateVisibility(true);
}
@Override
protected List<SpinnerItem> doInBackground(Void... voids)
{
DbHelperJob findjob = new DbHelperJob(context);
try
{
QueryBuilder<Job, String> queryBuilder = findjob.getJobDao().queryBuilder();
List<Job> results = queryBuilder.selectColumns("ID_JOB", "NAME_JOB", "TASK_JOB").orderBy("DEFAULT_JOB", false).query();
for (Job a : results)
{
Log.v("result: ", "aggiungo job");
userList.add(new SpinnerItem(String.valueOf(a.getId()), a.getName_job(),a.getName_task()));
}
}
catch (SQLException e)
{
Log.v("exc: ", e.toString());
e.printStackTrace();
}
return userList;
}
@Override
protected void onPostExecute(List<SpinnerItem> result)
{
super.onPostExecute(result);
Log.v("post: ", "setto spinner");
CustomSpinnerAdapter adapter = new CustomSpinnerAdapter(context,R.layout.custom_spinner_item, userList);
drawerHolder.spinner.setAdapter(adapter);
setProgressBarIndeterminateVisibility(false);
}
}
答案 0 :(得分:0)
问题是你的&#39; drawerHolder.spinner.setAdapter(适配器);&#39;在onPostExecute()
方法中。
由于AsyncTask与主线程并行执行,执行代码的顺序如下:
在设置侦听器后设置适配器,再次删除侦听器。
因此,在设置适配器后,必须在onPostExecute()
内设置侦听器。