Android 微调器 onselect AsyncTask

Android spinner onselect AsyncTask

我有 2 个微调器元素,如果用户更改任何微调器的 selection,我想启动一个异步任务

问题是,当我在我的设备上启动 activity 时,两个异步任务都会立即启动,即使用户没有 select 任何东西。

我尝试了什么:

        final Spinner sp1 = findViewById(R.id.spinner1);
    final Spinner sp2 = findViewById(R.id.spinner2);

    final List<String> list = new ArrayList<String>();
    list.add(getString(R.string.text1));
    list.add(getString(R.string.text2));
    list.add(getString(R.string.text3));

    final List<String> list2 = new ArrayList<String>();
    list2.add(getString(R.string.item1));
    list2.add(getString(R.string.item2));
    list2.add(getString(R.string.item3));

    ArrayAdapter<String> adp1 = new ArrayAdapter<String>(this,
            R.layout.spinner_item, list);
    adp1.setDropDownViewResource(R.layout.my_spinnerlist);
    sp1.setAdapter(adp1);
    sp1.setSelection(((ArrayAdapter)sp1.getAdapter()).getPosition(default1));

    ArrayAdapter<String> adp2 = new ArrayAdapter<String>(this,
            R.layout.spinner_item, list2);
    adp2.setDropDownViewResource(R.layout.my_spinnerlist);
    sp2.setAdapter(adp2);
   sp2.setSelection(((ArrayAdapter)sp2.getAdapter()).getPosition(default2));

    sp1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {

            String item1 = list.get(position);

            actorsList = new ArrayList<>();
            adapter = new ActorAdapter(Zoznam.this, "Zoznam", R.layout.novinkydata_item, actorsList);
            lv.setAdapter(null);lv.setAdapter(adapter); adapter.notifyDataSetChanged();
            lv.setVisibility(VISIBLE);
            new GetContacts(Zoznam.this).execute(item1,"");


        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

    sp2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {

       String item2 = list2.get(position);

               actorsList = new ArrayList<>();
            adapter = new ActorAdapter(Zoznam.this, "Zoznam", R.layout.novinkydata_item, actorsList);
            lv.setAdapter(null);lv.setAdapter(adapter); adapter.notifyDataSetChanged();
            lv.setVisibility(VISIBLE);
            new GetContacts(Zoznam.this).execute("",item2);
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });

那么为什么新的 GetContacts(Zoznam.this).execute... 在 activity 启动后立即为两个侦听器启动?我认为 setOnItemSelectedListener 应该仅在用户与 selection 交互时启动,但默认情况下不会启动。

我这里有问题吗?

PS:当我与第一个微调器交互时,它工作正常,只有 1 个 AsyncTask 被启动,如果我与第二个微调器交互也是如此——只有第二个 AsyncTask 被启动。

问题仅在我启动 activity 时出现,然后两个 AsyncTask 都在没有与微调器进行任何交互的情况下启动。

当你设置监听器时触发监听器,因为它触发了onItemSelected。

最后我从@Jim Rhodes 建议的线程中找到了一个简单的解决方案。

  sp1.setAdapter(adp1);
  sp1.setSelected(false);
  sp1.setSelection(0,true);

在 setAdapter 之后,我将 false 用于 setSelected,然后在微调器初始化期间不会调用 OnItemSelected()。

非常简单的解决方案并且工作正常。