在asynctask之后没有调用setOnItemSelectedListener()

时间:2014-05-18 13:44:48

标签: java android android-asynctask onclicklistener android-spinner

我遇到自定义微调器的问题。实际上,我通过查询加载一个微调器,并且使用特定的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);
            }
        }

1 个答案:

答案 0 :(得分:0)

问题是你的&#39; drawerHolder.spinner.setAdapter(适配器);&#39;在onPostExecute()方法中。 由于AsyncTask与主线程并行执行,执行代码的顺序如下:

  1. 执行AsyncTask
  2. 设置侦听器
  3. 设置适配器
  4. 在设置侦听器后设置适配器,再次删除侦听器。 因此,在设置适配器后,必须在onPostExecute()内设置侦听器。