Below is xml declaration of spinner:
<Spinner
android:id="@+id/spnReasonActApplyLeave"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dimen_20_dp" />
Below is initialization in activity class:
var adapterReasons: LeaveReasonSpinnerAdapter ?= null
adapterReasons = LeaveReasonSpinnerAdapter(this,R.layout.row_reason_spinner_item, reasonList)
spnReasonActApplyLeave.adapter = adapterReasons
spnReasonActApplyLeave.setOnItemSelectedListener(object: AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
Log.e("ApplyLeave", "Selected Reason: "+reasonList.get(position))
}
override fun onNothingSelected(parent: AdapterView<*>?) {
}
})
Below is row_reason_spinner_item xml file:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tvReasonRowReasonSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="@dimen/txt_16_sp" />
Below is LeaveReasonSpinnerAdapter class:
public class LeaveReasonSpinnerAdapter extends ArrayAdapter<LeaveReasonListPayloadDataResponse> {
private final LayoutInflater mInflater;
private Context mContext;
int layoutResourceId;
private List<LeaveReasonListPayloadDataResponse> data = new ArrayList<>();
public LeaveReasonSpinnerAdapter(Context context, int resource, ArrayList<LeaveReasonListPayloadDataResponse> list) {
super(context, resource, list);
mContext = context;
mInflater = LayoutInflater.from(context);
layoutResourceId = resource;
data = list;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return createItemView(position, convertView, parent);
}
@Override
public int getCount() {
return data.size();
}
@Override
public LeaveReasonListPayloadDataResponse getItem(int position) {
return data.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return createItemView(position, convertView, parent);
}
private View createItemView(int position, View convertView, ViewGroup parent){
View view = mInflater.inflate(layoutResourceId, parent, false);
TextView label = (TextView) view.findViewById(R.id.tvReasonRowReasonSpinner);
LeaveReasonListPayloadDataResponse offerData = data.get(position);
label.setText(offerData.getReason());
label.setTextColor(ContextCompat.getColor(mContext, R.color.black));
// label.setBackgroundColor(ContextCompat.getColor(mContext, R.color.black));
return view;
}
}
i tried many things. i also implemented appcompatspinner but still no luck in it. when i select spinner that time i can see values in dropdown but not after selecting any item.
There is also another issue in it. setonitemselectedlistener of that spinner is also not called.