Пример настраиваемого элемента spinnerDropDownViewResource

Я хотел бы отобразить два значения в раскрывающемся списке моего счетчика.

В настоящее время у него есть только название города, но я также хотел бы добавить к нему небольшое поле расстояния.

MyCity<MyCityDistance> dataAdapter; dataAdapter = new MyCity(this, R.layout.mycityrow, list); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

У меня есть весь код для пользовательского адаптера данных, exapanding мой взгляд и держатель и т. Д.

Однако элемент, который получает шоу, не отображает ни город, ни его расстояние от моего текущего местоположения.

Он показывает только то, что переопределено в методе toString () класса MyCityDistance.

Я даже пытался настроить

dataAdapter.setDropDownViewResource(R.layout.mycityrow);

Но, без успеха. Это порождает ошибку.

 04-02 11:05:22.600: E/AndroidRuntime(367): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347) 04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:376) 04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:332) 

Что является хорошим примером создания собственного пользовательского setDropDownViewResource() ?

Даже если я прокомментирую setDropDownViewResource() , я получаю ту же ошибку.

Примечание. Единственным эффектом mycityrow является то, что первый элемент Spinner показан в соответствии с макетом mycityrow . Однако, когда я открываю раскрывающийся список, этот макет теряется. Я хочу иметь ту же макет при выпадающем выборе.

Solutions Collecting From Web of "Пример настраиваемого элемента spinnerDropDownViewResource"

Обратите внимание, что в приведенном ниже примере используется встроенный android.R.layout.simple_list_item_2 К сожалению, цвет текста, вероятно, будет таким же, как и фон. Вы можете просто решить это, создав свой собственный пользовательский вид и вместо этого используйте его в адаптере.

Дайте мне знать, если я должен объяснить любую его часть.

 public class MainActivity extends Activity { class City { public City(String city, int d) { this.city = city; this.distance = String.valueOf(d); } String city; String distance; } class CityAdapter extends ArrayAdapter<City> { public CityAdapter(Context context, List<City> objects) { super(context, android.R.layout.simple_list_item_2, objects); } @Override //don't override if you don't want the default spinner to be a two line view public View getView(int position, View convertView, ViewGroup parent) { return initView(position, convertView); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return initView(position, convertView); } private View initView(int position, View convertView) { if(convertView == null) convertView = View.inflate(getContext(), android.R.layout.simple_list_item_2, null); TextView tvText1 = (TextView)convertView.findViewById(android.R.id.text1); TextView tvText2 = (TextView)convertView.findViewById(android.R.id.text2); tvText1.setText(getItem(position).city); tvText2.setText(getItem(position).distance); return convertView; } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner)findViewById(R.id.spinner1); List<City> list = new ArrayList<MainActivity.City>(); for(int i = 0; i < 10; i++) list.add(new City(String.format("City %d", i + 1), (i + 1) * 1000)); spinner.setAdapter(new CityAdapter(this, list)); } } 

Попробуйте комментировать строку dataAdapter.setDropDownViewResource (), и адаптер попытается также использовать файл макета mycityow для выпадающего списка. Работает в простых случаях.