метод setAdapter для объекта Spinner - всегда ли нам нужно реализовывать его как расширение ArrayAdapter? - PullRequest
0 голосов
/ 10 марта 2011

Рассмотрим следующий код, который представляет собой простой способ определения счетчика с данными из массива, поддерживающего его функцию:

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 не имеет метода setDropDownViewResource, такого как ArrayAdapter, так как бы нам установить ресурс раскрывающегося представления, который должен отображаться на счетчике? Я запутался в том, как SpinnerAdapter выполняет свои функции адаптера для Spinner, когда он не может предоставить два вида (поле и раскрывающийся список), которые требуются для Spinner?

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 10 марта 2011

SpinnerAdapter является интерфейсом и поэтому определяет только набор методов, которые необходимы для поддержки Spinner.

ArrayAdapter является классом и реализует методы интерфейса SpinnerAdapter вместе с другими функциональными возможностями, чтобы фактически обеспечить работающую реализацию.

Вы можете написать свой собственный класс, который реализует методы из интерфейса SpinnerAdapter, чтобы показать, что вы хотите показать в раскрывающемся списке, но поскольку SpinnerAdapter не содержит кода, вы не можете использовать сам SpinnerAdapter.

Лучший способ думать об этом - SpinnerAdapter говорит вам, что вам нужно сделать (так как это интерфейс), и ArrayAdapter фактически делает это (потому что это класс).

...