dbm*_*dbm 62 android spinner android-spinner
我的布局中有一个Android Spinner视图.我希望该微调器在关闭时只显示一个文本项,但是当用户点击它时(即打开微调器对话框)我想为每个项显示更多信息,包括图标和其他描述文本视图.现在,微调器在两种状态下都显示了相同的布局(图标,标题+描述).
如果我将一个ArrayAdapter附加到微调器,那么我可以访问一个名为"setDropDownViewResource"的东西,但这不一定是我需要的东西,因为我的微调器数据是从一个Cursor中提取的,而不是从任何类型的数组中取出的(我现在有, ,创建了我自己的适配器,扩展了BaseAdapter).
谁可以帮助我?
Flo*_*Flo 106
您必须Adapter为Spinner 创建一个自定义类,并覆盖getView()常规关闭视图和getDropDownView()下拉列表视图的两个方法.两种方法都必须View为单个元素返回一个对象.
看看本教程,它可能会帮助您入门.
小智 14
我也有问题.我没有重写这个课程,而是采用了一种更简单的方法.
但首先,您需要了解适配器构造函数中的资源ID与中的另一个中的资源ID之间的区别setDropDownViewResource(...).例如,
SimpleAdapter adapter =
new SimpleAdapter(ab.getThemedContext(), data, R.layout.actionbar_dropdown, new String[] { "EventID", "Icon" },
new int[] { R.id.event_id, R.id.icon });
adapter.setDropDownViewResource(R.layout.actionbar_list_item);
Run Code Online (Sandbox Code Playgroud)
R.layout.actionbar_dropdown是微调器的样式,也是R.layout.actionbar_list_item每个列表项的样式.
我在这里使用SimpleAdapter,因为如果我使用ArrayAdapter,xml只能是一个TextView.
R.layout.actionbar_list_item包含一个ID为的TextView event_id和一个id为的ImageView icon.
R.layout.actionbar_dropdown几乎完全相同actionbar_list_item,但后者的ImageView的可见性设置为GONE.
这样,每个列表项都有一个textview和一个imageview,但是你只能在微调器上看到一个textview.
Alv*_*ban 10
使用Flo链接的教程代码,我创建了以下CustomSpinnerAdapter,以显示两个不同的字符串集,一个显示项目,另一个不显示.我希望它对某人有帮助.
public class CustomSpinnerAdapter extends ArrayAdapter<String> {
Context mContext;
int mTextViewResourceId;
String[] mObjects;
String[] mShortNameObjects;
public CustomSpinnerAdapter(Context context, int textViewResourceId,
String[] objects, String[] shortNameObjects) {
super(context, textViewResourceId, objects);
mContext = context;
mTextViewResourceId = textViewResourceId;
mObjects = objects;
mShortNameObjects = shortNameObjects;
}
@Override
public View getDropDownView(int position, View convertView,
ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView row = (TextView) inflater.inflate(mTextViewResourceId, parent, false);
row.setText(mObjects[position]);
return row;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView row = (TextView) inflater.inflate(mTextViewResourceId, parent, false);
row.setText(mShortNameObjects[position]);
return row;
}
}
Run Code Online (Sandbox Code Playgroud)
片段内的用法:
CustomSpinnerAdapter mSpinnerAdapter = new CustomSpinnerAdapter(getActivity(), R.layout.spinner_item, getResources().getStringArray(R.array.action_filter), getResources().getStringArray(R.array.action_filter_short_names));
Run Code Online (Sandbox Code Playgroud)
最后,微调项目的布局:
spinner_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="18dip"
android:gravity="left"
android:textColor="@color/navdraw_list_item_background_default"
android:padding="5dip" />
Run Code Online (Sandbox Code Playgroud)
仅使用替代布局设置下拉视图资源:
ArrayAdapter<String> genderAdapter = new ArrayAdapter<>(this, R.layout.adapter_spinner_white, Constants.GENDER);
genderAdapter.setDropDownViewResource(R.layout.adapter_spinner_white_dropdown);
view.setAdapter(genderAdapter);
Run Code Online (Sandbox Code Playgroud)
对我来说,它只是一个带有额外填充的布局,因为我的旋转器背景是圆形可绘制的并且需要这个额外的空间.
| 归档时间: |
|
| 查看次数: |
28021 次 |
| 最近记录: |