我的问题是,不是重新发明轶事轮; 我想为Spinners和ListViews使用相同的布局,其中列表将基于相同的数据。
我还想在整个应用程序中使用类似的自定义外观,例如列表(Spinners和ListViews)具有交替的行颜色和根据当前核心活动()编码的颜色。
例如。我的应用有商店(核心活动),在ListView
(ShopName,ShopCity和ShopOrder)中显示为列表,用于此的布局为 R.layout.shoplist
,按照:
我的应用程序还有Aisles(另一项核心活动,因此颜色不同)。过道列表仅限于其中一个商店,因此合并了一个Spinner,列出了可用的商店以选择相应的过道。 Aisle列表目前看起来像没有微调器: -
我知道我只需使用ShopList适配器,就可以在Spinner适配器中为微调器指定ShopLIst Listview的Items布局(其中 sclcsr 是包含所有商店的cusror,并且选择商店是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
的来电,第二个用于指示是否显示额外数据)
然而,结果是: -
这就是Spinner的下拉列表中缺少的定制。
因此问题现在可以我需要做什么来设置下拉列表的背景颜色?
注意我有一个类(ActionColorCoding)和方法,用于在adpater的 getView
方法中去除/应用颜色,如下所示: -
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);
}
因此,以上将是要合并到适配器中的代码的基础。 Spinnner的选择/选定项目的受害者不是问题,因为这是Spinner在活动布局中的声明。
请注意,本课题的目的是作为一个指南,可能对其他人提供帮助,因为这种技术似乎没有答案
答案 0 :(得分: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);
}
您得到的结果是: -