数字选择器冻结了该应用程序-为什么会冻结?

时间:2018-11-15 09:46:38

标签: java android numberpicker

我正在创建水平方向的 NumberPicker ,这冻结了我的应用程序。初始状态是选择器不可见。在一种方法中,我将其设置为可见并将数据推送到其中

        if (_regalPicker != null) {
        _regalPicker.setVisibility(View.VISIBLE);
        String[] templist = new String[arr.size()];
        for (int i = 0; i < arr.size(); i++) {
            templist[i] = arr.get(i).name;
        }
        _regalPicker.setDisplayedValues(null);
        _regalPicker.setMinValue(0);
        _regalPicker.setMaxValue(templist.length - 1);
        _regalPicker.setDisplayedValues(templist);
        _regalPicker.setValue(1);
        _regalPicker.setEnabled(true);
        _regalPicker.setFadingEdgeEnabled(true);
        _regalPicker.setScrollerEnabled(true);
        _regalPicker.setWrapSelectorWheel(true);
        _regalPicker.invalidate();
    }

它会更新字符串,但我现在无法滚动了。有任何想法吗? 我的分隔线也没有更新。

1 个答案:

答案 0 :(得分:0)

您可以刷新用户界面,而无需使用线程冻结应用程序

Thread thread = new Thread(){
       public void run(){

            String[] templist = new String[arr.size()];
                    for (int i = 0; i < arr.size(); i++) {
                        templist[i] = arr.get(i).name;
                    }

            runOnUiThread(new Runnable(){
                @Override
                public void run(){
                    // change UI elements here
                    if (_regalPicker != null) {
                        _regalPicker.setVisibility(View.VISIBLE);
                        _regalPicker.setDisplayedValues(null);
                        _regalPicker.setMinValue(0);
                        _regalPicker.setMaxValue(templist.length - 1);
                        _regalPicker.setDisplayedValues(templist);
                        _regalPicker.setValue(1);
                        _regalPicker.setEnabled(true);
                        _regalPicker.setFadingEdgeEnabled(true);
                        _regalPicker.setScrollerEnabled(true);
                        _regalPicker.setWrapSelectorWheel(true);
                        _regalPicker.invalidate();
                  }

                }
            });

       }
    }        
thread.start();