Dynamically setSelection of spinner, do not trigger OnItemSelectedListener

一笑奈何 提交于 2019-12-05 13:54:11

I finally find a creepy solution. it seems the problem is with android system that need some time to create item and views. when I call onClickListener of first spinner it should create second one and fill data and it is time consuming action. so I had to put delay for each Item with variable intervals:

for (int i = 0; i < some_value; i++) {
            selectItemOfSpinner(i);
        }


private void selectItemOfSpinner(final int i) {

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            MaterialSpinner spinner = spinnerList.get(i);
            int positionOfItem = get_proper_position;
            spinner.setSelection(positionOfItem, true);
        }
    }, 50*i);

}

this solved my problem and all spinners creates and fills properly. but in some slow device the delay time should increase and this is why i said creepy way. I working on this and I will update the solution if I find a better way.

I think what you're trying to accomplish is achievable with performItemClick

for (int i = 0; i < some_value; i++) {

        int positionOfItem = get_proper_position;
        MaterialSpinner spinner = spinnerList.get(i);
        spinner.setSelection(positionOfItem);

        View itemView = (View)spinner.getChildAt(positionOfItem);
        long itemId = your_spinner.getAdapter().getItemId(positionOfItem);

        spinner.performItemClick(itemView, positionOfItem, itemId);
} 

setSelection doesn't fire OnItemSelectedListener but performItemClick does.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!