我有一个高级研究活动,其中的一个微调器包含数据库中的所有类别。当我创建活动时,此微调器会循环调用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之前
据我所知,您是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
}
这是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();
}
我正在使用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
}
});
}
确定,标记为已解决。我创建一个新列表,然后将我的集合转换为列表。完成此操作后,我会在第一个位置添加一个null元素,并在调用onItemSelected时执行[]
if(position!= 0)然后//做某事
活动始终从位置0开始,然后必须等待我的点击和选择。谢谢大家的帮助。