Reputation: 11100
I have a Fragment where I dynamically create spinners. When I select item from spinner the onItemSelected
doesn't trigger. Can I use AdapterView.OnItemSelectedListener
interface in my approach? What am I doing wrong? Is there a best practices of handling item selection?
Here is the code:
public class ArticleAddParamsFragment extends Fragment implements AdapterView.OnItemSelectedListener {
private LinearLayout addPrLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_article_addparams, container, false);
addPrLayout = (LinearLayout) rootView.findViewById(R.id.addparams_layout);
setUpSpinners(getArguments().getLong("idArt"));
return rootView;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// doesn't go here
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// doesn't go here
}
private void setUpSpinners(long idArt){
RealmAddParam addParForArt = realm.where(RealmAddParam.class)
.findAll()
.where()
.equalTo("idTaskart", idArt)
.findFirst();
for (RealmAddPrmMain prm: addParForArt.getAddParams()) {
addPrLayout.addView(createSpinner(prm));
}
}
public Spinner createSpinner(RealmAddPrmMain adPrm) {
Spinner spinner = new Spinner(getActivity());
spinner.setPrompt(adPrm.getNameAdd());
spinner.setFocusableInTouchMode(true);
spinner.setFocusable(true);
final ArrayList<SpinnerAdPrObj> spObjects = new ArrayList<>();
if (adPrm.getVvalue() != null) {
String[] values = adPrm.getVvalue().replace("[","").replace("]","").split(",");
if (values.length > 1){
for (Integer i = 0; i < values.length; i++){;
if (values[i].split(":::").length > 1) {
spObjects.add(new SpinnerAdPrObj(values[i].split(":::")[0], values[i].split(":::")[2], values[i].split(":::")[1]));
} else {
spObjects.add(new SpinnerAdPrObj(values[i].split(":::")[0]));
}
}
}
}
ArrayAdapter<SpinnerAdPrObj> adapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, spObjects);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
return spinner;
}
}
SOLUTION WAS:
just to add spinner.setOnItemSelectedListener(this);
Upvotes: 0
Views: 1155
Reputation: 3056
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
Upvotes: 1