getDropDownView()がオーバーライドされたカスタムアダプタを使用するSpinnerがあります。カスタムドロップダウンビューの各項目は、TextViewとボタンで構成されています。カスタムドロップダウンビューのSpinnerがonItemSelected()を起動しない
私のコードを実行すると、スピナーのドロップダウンアイテムは表示されますが、クリックすると何も表示されません。スピナーのドロップダウンは開いたままで、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) 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
}
});
だから私はしないでくださいなぜonItemなのか知っているSelected()は呼び出されなくなりましたか?
ドロップダウンTextViewにクリックリスナーを配置する必要があるのでしょうか?spinner.setSelection(pos)を使用してonItemSelected()をトリガーする必要がありますか?
getDropDownViewでOnClickListenerを定義していますか?動作していますか?私の場合、getDropDownViewにOnClickListenerを追加すると、クリックした後にスピナービューが閉じることはありません。 – Kenji