我有3个微调器,用于选择班级,部门和学科。这三个相互依赖。我只想在选择班级后启用部门的微调器,并在选择班级和部门后启用主题的微调器。并且我想检查单击微调器时是否启用微调器。
我已经通过使用setEnabled启用和禁用微调器,如下所示:
spDivision.setEnabled(true);
spDivision.setEnabled(false);
而且,它对我有用。
我使用了onitemSelected监听器
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
ClassDivData classDivData = (ClassDivData) parent.getItemAtPosition(position);
if(parent == spClass)
{
clsId = classDivData.getId();
// Showing selected spinner item
if(classDivData.getId()>0)
Toast.makeText(parent.getContext(), "Selected: " + classDivData.getId(), Toast.LENGTH_LONG).show();
}
else if(parent == spDivision)
{
divId =classDivData.getId();
// Showing selected spinner item
if (classDivData.getId()>0)
Toast.makeText(parent.getContext(), "Selected: " + classDivData.getId(), Toast.LENGTH_LONG).show();
}
else if(parent == spSubject)
{
subId =classDivData.getId();
// Showing selected spinner item
if (classDivData.getId()>0)
Toast.makeText(parent.getContext(), "Selected: " + classDivData.getId(), Toast.LENGTH_LONG).show();
}
enablingSpinners(); // to enable or disable spinners
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
功能enableSpinners()用于启用或禁用微调器
private void enableSpinners() {
if(clsId >-1)
{
spDivision.setEnabled(true);
}
else
{
spDivision.setEnabled(false);
}
if(clsId >-1 && divId >-1)
{
spSubject.setEnabled(true);
}
else {
spSubject.setEnabled(false);
}
}
注意:-1是微调器的默认值
我的问题是我无法获得微调器的点击。我需要的是,当我单击微调器时,我想知道该微调器是否已启用。只有这样,我才能向用户显示他必须首先选择班级才能选择部门。
我已经尝试过使用微调框的setOnClickListener。
spDivision.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!spDivision.isEnabled())
{
Toast.makeText(AddHomeWorkActivity.this, "First choose a class", Toast.LENGTH_SHORT).show();
}
}
});
但是我收到如下错误:
Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
我也尝试过。但是出现如下错误:
Caused by: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
我为我的问题的解决方案和很多结果进行了大量搜索。但是我没有真正解决问题的方法
答案 0 :(得分:1)
您应该使用setOnItemSelectedListener
,
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
要了解是否启用了微调器,请使用
if(spinner.isEnabled())