[已解决] Spinner侦听器OnItemSelectedListener函数,无需单击Spinner

问题描述 投票:0回答:4

我有一个高级研究活动,其中的一个微调器包含数据库中的所有类别。当我创建活动时,此微调器会循环调用onSetItemListener。为什么?

我尝试使用onTouchListener,但无法正常工作,也许我无法通过某些操作。

if(risultato.getCategoria().getSottocategorie().toArray() != null && risultato.getCategoria().getSottocategorie().toArray().length != 0){
                adapterSpinnerCategoria = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, risultato.getCategoria().getSottocategorie().toArray());
            }else{
                adapterSpinnerCategoria = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, categoriaVuota);
            }
            spinnerCategoria.setAdapter(adapterSpinnerCategoria);



 public void spinnerChange(AdapterView<?> parent){
        if(!parent.getSelectedItem().toString().equals("Sottocategorie vuote")) {
            ricercaAvanzata.setCategoria((Categoria) parent.getSelectedItem());
            setArticoli();
        }
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        spinnerChange(parent);
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        return;
    }



 public void setListener() {
        spinnerCategoria.setOnItemSelectedListener(this);
    }


public class ActivityRicercaAvanzata extends AppCompatActivity implements AdapterView.OnItemSelectedListener { .... }

我希望当我单击微调器调用onItemSelected之前

android spinner android-spinner
4个回答
0
投票

据我所知,您是extending AdapterView.OnItemSelectedListener。您无法扩展它,因为OnItemSelectedListener是接口而不是类。

您实际上应该做的是,改为实现它,就像这样:

MyActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

}

然后您可以在微调器上设置OnItemSelectedListener,

spinnerCategoria.setOnItemSelectedListener(this);

最后一步是编写覆盖方法的实现,

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //Your implementation here
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        //Your implementation here
    }

0
投票

这是setArticoli()的代码

 public void setArticoli(){
        ricerca.setText(EXTRA_RICERCA);
        ricercaAvanzata.setParolaChiave(EXTRA_RICERCA);

        RecyclerView risultatiRicerca = findViewById(R.id.recycleViewArticoliRicercaAvanzata);
        RecyclerView filtriRicercaAvanzata = findViewById(R.id.contenitoreFiltri);
        risultatiRicerca.setAdapter(null);
        filtriRicercaAvanzata.setAdapter(null);
        risultatiRicerca.setLayoutManager(new LinearLayoutManager(ActivityRicercaAvanzata.this, LinearLayoutManager.VERTICAL, false));
        filtriRicercaAvanzata.setLayoutManager(new LinearLayoutManager(ActivityRicercaAvanzata.this, LinearLayoutManager.VERTICAL, false));

        if(ricercaAvanzata.getCategoria() != null && ricercaAvanzata.getCategoria().getId() == null){
            ricercaAvanzata.setCategoria(null);
        }
        //Prezzo valido
        /**
         * prezzo valido da mettere qui
         *      if(ricerca.getFiltroPrezzo() != null && !ricerca.getFiltroPrezzo().isValido())
         *          ricerca.setFiltroPrezzo(null);
         */
        StrategiaEsecuzione<RicercaAvanzata> strategiaEsecuzione = () -> MainActivity.clientRicercaAvanzata.effettuaRicercaAvanzata(ricercaAvanzata);
        StrategiaPostEsecuzione<RicercaAvanzata> strategiaPostEsecuzione = risultato -> {
            AdapterArticoliRicercaAvanzata articoliRicercaAvanzataAdapter = new AdapterArticoliRicercaAvanzata(this, risultato);
            AdapterFiltriAvanzati contenitoreFiltriRicercaAvanzata = new AdapterFiltriAvanzati(this, risultato.getFiltri());
            risultatiRicerca.setAdapter(articoliRicercaAvanzataAdapter);
            filtriRicercaAvanzata.setAdapter(contenitoreFiltriRicercaAvanzata);
            articoliRicercaAvanzataAdapter.setOnItemClickListener(ActivityRicercaAvanzata.this);

            if(risultato.getCategoria().getSottocategorie().toArray() != null && risultato.getCategoria().getSottocategorie().toArray().length != 0){
                adapterSpinnerCategoria = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, risultato.getCategoria().getSottocategorie().toArray());
            }else{
                adapterSpinnerCategoria = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, categoriaVuota);
            }
            spinnerCategoria.setAdapter(adapterSpinnerCategoria);
        };
        StrategiaErroreEsecuzione<RuntimeException> strategiaErroreEsecuzione = t -> {
            Toast errore = Toast.makeText(this.getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT);
            errore.show();
        };
        OperazioneInBackground<RicercaAvanzata> setRicerca = new OperazioneInBackground<>(strategiaEsecuzione, strategiaPostEsecuzione, strategiaErroreEsecuzione);
        setRicerca.execute();
    }

0
投票

我正在使用Spinner进行用户注册的国家/地区选择。请投票给我答案。

Spinner spcountry;
String  country;

//in onCreare
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

spcountry = (Spinner) findViewById(R.id.country);
        final String[] countryNames = getResources().getStringArray(R.array.countries_array);
        ArrayAdapter aa = new ArrayAdapter(this, android.R.layout.simple_spinner_item, countryNames);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //Setting the ArrayAdapter data on the Spinner
        spcountry.setAdapter(aa);


spcountry.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                Log.v("item", (String) parent.getItemAtPosition(position));
                if (position == 0) {

                    return;
                } else
                    country = countryNames[position];
                //Toast.makeText(getBaseContext(),country,Toast.LENGTH_SHORT).show();

            }

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

0
投票

确定,标记为已解决。我创建一个新列表,然后将我的集合转换为列表。完成此操作后,我会在第一个位置添加一个null元素,并在调用onItemSelected时执行[]

if(position!= 0)然后//做某事

活动始终从位置0开始,然后必须等待我的点击和选择。谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.