2016-12-10 8 views
1

Проблема заключается в том, что вместо того, чтобы повторно изобретать анекдотическое колесо; Я бы хотел использовать тот же макет для Spinners, а также для ListViews, где список будет основан на тех же данных.Могу ли я эффективно использовать один макет как для счетчика, так и для списка?

Я также хочу, чтобы во всем приложении отображался аналогичный внешний вид, такой как списки (Spinners и ListViews), имеющие переменные цвета и цвета строк, закодированные в соответствии с текущей активностью ядра().

Например. Мое приложение имеет Shops (основной деятельности), которые отображаются в виде списка в ListView (ShopName, ShopCity и ShopOrder), макет используется для этого R.layout.shoplist, согласно:

ListView for Shops

мое приложение также имеет Aisles (другое основное действие, поэтому цвета разные). Список Проходов ограничивается одним из Магазинов, поэтому включен Spinner, перечисляя доступные магазины, чтобы выбрать соответствующие Проходы. Список междурядья в настоящее время выглядит, без блесны: -

ListView for Aisles without Spinner

Я знаю, что я могу просто указать ShopLIst ListView в Items макет для блесны в адаптере в Прядильщиках просто с помощью адаптера ShopList согласно (где sclcsr является cusror, содержащий все магазины, и selectshoplist является Spinner): -

 slcsr = dbshopmethods.getShops("", shopsorderby); 
     selectshoplistadapter = new AdapterShopList(this, 
       slcsr, 
       CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER, 
       getIntent(), 
       true, 
       false 
     ); 
     selectshoplist.setAdapter(selectshoplistadapter); 

Примечание! есть 3 дополнительных параметра, чем со стандартным адаптером, передается Intent (извлечено int, которое используется для определения диапазона цветов, первый boolean является флагом для указания вызова от Spinner, а не ListView , второй используется для указания того, или нет, чтобы показать дополнительные данные)

Однако результат: -

Aislelist with spinner directly using the Shoplist layout

То есть кастомизация отсутствует в списке выпадающего Прядильщиков.

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

Примечания У меня есть класс (ActionColorCoding) и методология detremining/применение цвета в методе getView в adpater, поскольку за: -

 int evenrow = ActionColorCoding.setHeadingColor(ctxt, 
       callerintent, 
       ActionColorCoding.getColorsPerGroup() - 1 
       ) & ActionColorCoding.transparency_evenrow; 
     int oddrow = evenrow & ActionColorCoding.transparency_oddrow; 
     if (position % 2 == 0) { 
      view.setBackgroundColor(evenrow); 
     } else { 
      view.setBackgroundColor(oddrow); 
     } 

Так что выше будет основой коды быть включенным в адаптер. Custimation of Spinnner's Selection/selected item не является проблемой, так как это соответствует декларации Spinner в макете деятельности.

Обратите внимание, намерение этого вопроса, как руководство, которое может оказаться полезным для других для техники, что не кажется, ответ на

+0

дать несколько минут другим отвечать :) –

+0

@MehdiKhademloo, согласно примечанию к дно. Ответ известен. Вопрос был предоставлен в качестве руководства для других. Следовательно, использование опции AskandAnswer, доступной при задании вопроса. – MikeT

ответ

1

Spinner на самом деле есть два компоновщика связанных с ними, второй макет быть для DropDownView и будет вызывать метод getDropDownView, если Overidden (в то время как ListViews вызвать метод getView).

Одна вещь, чтобы отметить, что, если getDropDownView вызывается тогда bindView не вызывается, поэтому вы должны вызывать его.

Добавляя следующее в ListView адаптер адаптер будет обслуживать для ListView и Spinner: -

@Override 
    public View getDropDownView(int position, View convertview, ViewGroup parent) { 
     super.getDropDownView(position, convertview, parent); 
     View view = convertview; 
     if (fromspinner) { 
      int cpos = this.cursor.getPosition(); 
      view = View.inflate(ctxt,R.layout.shoplist,null); 
      int evenrow = ActionColorCoding.setHeadingColor(ctxt,callerintent, ActionColorCoding.getColorsPerGroup() - 1) & ActionColorCoding.transparency_evenrow; 
      int oddrow = evenrow & ActionColorCoding.transparency_oddrow; 
      if (position % 2 == 0) { 
       view.setBackgroundColor(evenrow); 
      } else { 
       view.setBackgroundColor(oddrow); 
      } 
      this.cursor.moveToPosition(position); 
     } 
     bindView(view, ctxt, this.cursor); 
     return view; 
    } 

Примечание! Я не считаю, что конструкция **if (fromspinner)** необходима, но была включена в качестве меры предосторожности.

Дополнительное примечание: callng super.getDropDownView(position, convertview, parent);, по-видимому, не требуется, и, таким образом, возможно, лучше всего сделано.

Примечание! ctxt, calleritent, fromspinner и cursor устанавливаются в конструкторе Adpater как за: -

AdapterShopList(Context context,Cursor csr, int flags, Intent intent, boolean fromspinner,boolean showdetails) { 
     super(context, csr, 0); 
     ctxt = context; 
     callerintent = intent; 
     this.fromspinner = fromspinner; 
     this.cursor = csr; 
     setShopOffsets(csr); 
    } 

В результате вы получаете: -

enter image description here

+0

Добавлена ​​дополнительная заметка, при которой вызов 'super.getDropDownView' лишний. – MikeT

 Смежные вопросы

  • Нет связанных вопросов^_^