首页 > 解决方案 > Android spinner onselect AsyncTask

问题描述

我有 2 个微调器元素,只有当用户更改任何微调器的选择时,我才想启动异步任务。

问题是,当我在设备上启动活动时,两个异步任务都会立即启动,即使用户没有选择任何内容。

我尝试了什么:

        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... 呢?我认为 setOnItemSelectedListener 应该仅在用户与选择进行交互时才启动,而不是默认情况下。

我这里有什么问题吗?

PS:当我与第一个微调器交互时,它工作正常,只启动了 1 个 AsyncTask,如果我与第二个微调器交互,则相同 - 仅启动第二个 AsyncTask。

问题只是当我开始活动时,两个 AsyncTask 都会在没有与微调器进行任何交互的情况下启动。

标签: androidandroid-spinner

解决方案


设置监听器时会触发监听器,因为它会触发onItemSelected。


推荐阅读