gpt4 book ai didi

android - 动态设置微调器的选择,不触发 OnItemSelectedListener

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:04 26 4
gpt4 key购买 nike

我有一个有许多级联微调器的 Activity ,在选择第一个微调器后,第二个微调器初始化并填充数据,在从第二个微调器中选择项目后,第三个微调器初始化并填充数据等等。

对于每个微调器,我都这样创建它们并且它是迭代的:

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) 时,不幸的是

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()

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

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

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

问题就在这里。第一次微调器大小为 1,但在 setselection 之后,监听器不调用并且第二个微调器不创建。

我还认为这是因为操作耗时,所以尝试使用可运行程序并发布一些延迟但它不起作用。

最佳答案

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

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);

}

这解决了我的问题,所有微调器都正确创建和填充。但在一些慢速设备中,延迟时间应该增加,这就是为什么我说令人毛骨悚然的方式。我正在努力解决这个问题,如果我找到更好的方法,我会更新解决方案。

关于android - 动态设置微调器的选择,不触发 OnItemSelectedListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40067757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com