Spinner对象上的setAdapter方法 - 我们是否总是需要将它作为ArrayAdapter的扩展来实现?

时间:2011-03-10 04:50:49

标签: android spinner adapter

考虑以下代码,这是一种使用支持​​其功能的Array中的数据定义微调器的简单方法:

public class HelloAndroid extends Activity implements AdapterView.OnItemSelectedListener {
    Spinner myspinner;
    ArrayAdapter<String> myadapter;
    final String[] sample_data={"Sankar", "Sunita", "Hari", "Susha", "Lovely"};

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        myspinner=(Spinner)findViewById(R.id.myspinner);
        myadapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,sample_data);
        myadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        myspinner.setOnItemSelectedListener(this);
        myspinner.setAdapter(myadapter);
    }

    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        Toast.makeText(this, myadapter.getItem(arg2), Toast.LENGTH_SHORT).show();
    }

    public void onNothingSelected(AdapterView<?> arg0) {
        Toast.makeText(this, "Nothing Selected", Toast.LENGTH_SHORT).show();
    }
}

我的观点是,为了实现微调器,我必须使用ArrayAdapter。我不能直接将Spinner与SpinnerAdapter的实现相关联吗? SpinnerAdapter没有像ArrayAdapter这样的setDropDownViewResource方法,那么我们如何设置应该在微调器上显示的下拉视图资源呢?当SpinnerAdapter无法提供微调器需要的两个视图(字段和下拉列表)时,我对SpinnerAdapter如何作为Spinner的适配器服务感到困惑?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

SpinnerAdapter是一个接口,因此只定义了一组支持Spinner所需的方法。

ArrayAdapter是一个类,它实现了SpinnerAdapter接口方法以及实际提供工作实现的其他功能。

您可以编写自己的类来实现SpinnerAdapter接口中的方法,以显示您想要在下拉列表中显示的内容,但由于SpinnerAdapter不包含任何代码,因此您无法使用SpinnerAdapter本身。

最好的思考方式是SpinnerAdapter告诉你需要做什么(因为它是一个接口),而ArrayAdapter实际上是这样做的(因为它是一个类)。