这个微调器项如何为空?

时间:2014-08-08 06:01:45

标签: android android-arrayadapter android-spinner null-pointer

我有一个微调器从ArrayAdapter获取数据。数组对象有一个toString()方法,由微调器使用。

在这种情况下,当数组中只有一个项目时,我正在设置适配器。数组中的对象返回一个非null String,但尽管微调器中有一个项,但它为null。为什么没有有效的TextView作为微调器中的项目。以下是在设置适配器后断开的程序:

Breakpoint

问题在于:

Expressions

这是MolData类

final class MolData
{
    private String name;
    private String value;
    final static Pattern endsDot = Pattern.compile("[.]$");

    MolData(String name, String value)
    {
        this.name = name;
        this.value = value;
    }
    MolData(String fileLine)
    {
        int dividerPos = fileLine.indexOf(':');
        value = fileLine.substring(0, dividerPos);
        name = fileLine.substring(dividerPos + 1);
    }

    @Override
    public String toString()
    {
        return name;
    }

    String getValue()
    {
        return value;
    }

    void setValue(String value)
    {
        this.value = value;
    }

    boolean hasName(String name)
    {
        return name.equals(this.name);
    }

    @SuppressLint("DefaultLocale")
    boolean isAfterName(String name)
    {
        if (this.value.equals(""))
        {
            return true;
        }
        int cmp = name.toLowerCase().compareTo(this.name.toLowerCase());
        if (cmp == 0)
        {
            cmp = name.compareTo(this.name);
        }
        return cmp > 0;
    }

    boolean hasValue(String value)
    {
        return this.value.equals(endsDot.matcher(value).replaceFirst(""));
    }
}

Abd这里是带问题的代码:

void finaliseSpinner(Spinner memSpinner, View molValue)
{
    this.memSpinner = memSpinner;
    this.molValue = (TextView) molValue;
    if (! restart)
    {
        memSpinner.setVisibility((molData.isEmpty() || (molData.size() == 1 && molData.get(0).hasValue(""))) ? View.INVISIBLE : View.VISIBLE);
        spinerColour1st = true;
    }
    memSpinner.setAdapter(spinnerAdapter =
            new ArrayAdapter<MolData>(activity, android.R.layout.simple_spinner_dropdown_item, molData));
    ignoreItemSelected = true;
    memSpinner.setOnItemSelectedListener(new SpinListener());
}

进一步澄清:我遇到的问题是getChildAt(0)在OnItemSelected侦听器中返回null。但是,当在正常启动时调用此代码时,虽然getChildCount在设置适配器后显示为零,但是在之后立即设置侦听器时,由其添加引起的侦听器调用具有有效的getChildAt(0)!但是当因为屏幕已经旋转而调用此代码时,getChildAt(0)在侦听器触发时为null,因为它已被添加。在正常启动时,此代码是从用户与UI的交互中调用的,但在重新启动屏幕后,将从onResume()调用此代码(在片段中)。 [它是从onCreate调用的,但是我在生命周期的后期移动它以查看它是否有帮助,但没有成功。 ]

0 个答案:

没有答案