如何获得微调器的点击并在特定条件下启用/启用它

时间:2019-07-12 08:02:48

标签: android

我有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.

我为我的问题的解决方案和很多结果进行了大量搜索。但是我没有真正解决问题的方法

1 个答案:

答案 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())