我正在使用Spinner
和一个名为AlgorithmAdapter
的自定义适配器类,原则上一切正常,这意味着出现了微调框弹出窗口,所有包含视图的窗口都被正确膨胀。然而,我无法找到的是我在选择时如何“告诉”微调器。当然我知道setSelection()
,但是没有处理弹出窗口并将焦点返回到Activity。
所以这里有一些相关的代码:
在我的活动中,我创建了这样的适配器:
SpinnerAdapter spinnerAdapter = new AlgorithmAdapter(
this,
algorithmSpinner,
R.layout.algo_spinner_item_detail,
res.getStringArray(R.array.anaglyph_algorithm_titles),
res.getStringArray(R.array.anaglyph_algorithm_descriptions),
res.obtainTypedArray(R.array.anaglyph_algorithm_icons),
algorithmSpinner.getSelectedItemPosition()
);
algorithmSpinner.setAdapter(spinnerAdapter);
AgorithmAdapter
的构造函数具有以下签名:
public AlgorithmAdapter(Context context, Spinner spinner, int viewResourceId, String[] titles,
String[] descriptions, TypedArray icons, int selectedPosition) {
getDropDownView()
的{{1}}方法:
AlgorithmAdapter
其中@Override
public View getDropDownView(final int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(viewResourceId, parent, false);
}
final ImageView icon = (ImageView) convertView.findViewById(R.id.algoItemIcon);
final TextView title = (TextView) convertView.findViewById(R.id.algoItemTitle);
final TextView description = (TextView) convertView.findViewById(R.id.algoItemDescription);
final RadioButton radio = (RadioButton) convertView.findViewById(R.id.algoItemRadio);
icon.setImageDrawable(icons.getDrawable(position));
title.setText(titles[position]);
description.setText(descriptions[position]);
radioGroup.add(radio);
/* it's essential to uncheck in case the positions do not match, because
* the system reuses views that could still have a checked radio button */
radio.setChecked(position == selectedPosition);
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// uncheck every other radio button
for(RadioButton each : radioGroup)
each.setChecked(false);
// inform adapter and user that this button is selected now
radio.setChecked(true);
selectedPosition = position;
spinner.setSelection(position);
}
});
return convertView;
}
是所有下拉视图中所有RadioButtons的列表,以便管理当前检查哪一个以及哪些必须取消选中。
这一切都很有效,除了弹出窗口没有关闭radioGroup
(它本身正在工作)。
我还尝试将setSelection()
附加到Spinner并管理其中的选择内容,但是会抛出一个异常OnItemClickListener
,这真的很烦人,因为它感觉好像框架就在我的方式,而不是在这一点上帮助我。但无论如何,这就是我必须将Spinner传递给适配器的原因,我很高兴我有一个不同的解决方案......
所以我唯一缺少的是我如何“关闭”或“处理”Spinners下拉菜单。有人可以帮我吗?这甚至是在附近的路上吗?这不是那么困难,因为为Spinners编写自定义适配器是一项非常基本的任务。
编辑:不知道这是否有帮助,但也许有人在我的下拉视图项的布局文件中发现错误。setOnItemClickListener cannot be used with a spinner
:
algo_spinner_item_detail.xml
在选择项目后,你如何关闭/处理finner的Spinner下拉?
答案 0 :(得分:0)
这就是我的诀窍(警告:不要向你的孩子展示这个代码,你肯定会为此付出代价):
在我onClick
的{{1}}方法中,我放了这行代码:
convertView
它不仅摆脱了包含((View) parent.getParent().getParent().getParent().getParent()).setVisibility(View.GONE);
s的LinearLayout,而且使convertView
不可见,在显示对话框/下拉菜单的同时使活动屏幕变暗
我仍然在寻求更好的解决方案。