我有一个Spinner,使用自定义适配器,其中重写了getDropDownView()方法。自定义下拉视图中的每个项目由TextView和Button组成。
但是,当我运行代码时,Spinner下拉项显示正常,但单击它们无效。 Spinner下拉仍保持打开状态,且未触发spinner.onItemSelected()方法。
drop_down_item.xml
但是,当我运行代码时,Spinner下拉项显示正常,但单击它们无效。 Spinner下拉仍保持打开状态,且未触发spinner.onItemSelected()方法。
drop_down_item.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/dropdown_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:singleLine="true" />
<Button
android:id="@+id/dropdown_button"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:text="Remove"/>
</RelativeLayout>
自定义适配器代码
public View getDropDownView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.drop_down_item, parent, false);
TextView textView = (TextView) rowView.findViewById(R.id.dropdown_text);
textView.setText(mValues.get(position));
Button buttonView = (Button) rowView.findViewById(R.id.dropdown_button));
return rowView;
}
我用以下代码创建我的Spinner和适配器:
spinner = (Spinner) findViewById(R.id.my_spinner);
MyAdapter adapter = new MyAdapter(getViewContext(), R.layout.spinner_item, values);
adapter.setDropDownViewResource(R.layout.drop_down_item);
spinner.setAdapter(adapter);
...
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// Do something here - but this never runs
}
});
我不知道为什么onItemSelected()方法不再被调用?
我在想是否需要给下拉菜单的TextView添加一个点击监听器,从而使用spinner.setSelection(pos)触发onItemSelected()方法?