动态设置旋转器的setSelection,不触发OnItemSelectedListener [英] Dynamically setSelection of spinner, do not trigger OnItemSelectedListener

查看:115
本文介绍了动态设置旋转器的setSelection,不触发OnItemSelectedListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个活动,其中有许多层叠的微调器,在选择第一个微调器后,第二个微调器初始化并填充数据,然后从第二个,第三个微调器中选择项初始化并填充数据,依此类推.

I have a activity that have many cascaded spinner and after select first one, second spinner initialize and fill data and after select item from second, third spinner initialize and fill data and so on.

对于每个微调器,我都是这样创建它们的,而且是反复进行的:

for each spinner I create them like this and it is iterative:

public ArrayList<MaterialSpinner> spinnerlist = new ArrayList<>();

public void createView(){
 final MaterialSpinner spinner = new MaterialSpinner(context);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){//...after select item next spinner creates with calling createView() iteratively}
        loadSpinnerData(); // set adapter and more
        spinnerlist.add(spinner);
}   

当按用户选择时,一切正常,但是不幸的是,当我动态使用setSelection(positionOfItem)时,

every things go right when select is by user, but when I use setSelection(positionOfItem) Dynamically, unfortunately

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()

不打电话.我不知道为什么会这样.

do not calls. I do not know why this happens.

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

            int positionOfItem = get_proper_position;
            spinnerList.get(i).setSelection(positionOfItem); //this not trigger onItemSelect!
        }

问题在这里.旋转器大小第一次为1,但是在setselection之后,监听器不会调用,第二个旋转器也不会创建.

the problem is here. spinner size is 1 in first time, but after setselection , listener do not calls and second spinner do not creates.

我还认为这是由于耗时的操作,因此请尝试使用可运行的程序并发布一些延迟,但是它不起作用.

I also thought this is because of time consuming action so try to use a run-able and post some delay but it not worked.

推荐答案

我终于找到了一个令人毛骨悚然的解决方案.看来问题出在Android系统上,需要一些时间来创建项目和视图. 当我调用第一个微调器的onClickListener时,它应该创建第二个微调器并填充数据,这是耗时的操作.所以我不得不以可变的间隔为每个项目设置延迟:

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.

这篇关于动态设置旋转器的setSelection,不触发OnItemSelectedListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆