【问题标题】:On Drage Event Seekbar Reset with 0在拖动事件搜索栏重置为 0
【发布时间】:2018-05-29 07:26:07
【问题描述】:

我已经实现了 seekbars 的列表。根据我的功能,我希望所有 seekbar 的总和不超过 100%,例如,如果我将第一个 seekbar 拖到 60%,下一个不会超过 40%。

我已经让它工作了,但是每当我将第一个拖到某个值(比如说 60 %),然后第二个拖到某个值时,比如说 40%,然后当我尝试拖到第一个以减小其值时,它都会重置到 0。我的代码有什么问题?

holder.shelfShareSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                remainingShelfShare = 100 - shelfShareSum;
                holder.percentTextView.setText(String.valueOf(progress));
            productShelfShareMap.get(((Products)list.get(position)).getProductID());
                if(progress > remainingShelfShare){
                 holder.shelfShareSeekbar.setProgress(remainingShelfShare);
                }
              }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {                 
             }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                list.get(position).setSetSlider(seekBar.getProgress());
                shelfShareSum = 0;

                productShelfShareMap.put(((Products)list.get(position)).getProductID(), Integer.parseInt(holder.percentTextView.getText().toString()));

                for (HashMap.Entry<Integer, Integer> entry : productShelfShareMap.entrySet()){
                    shelfShareSum += entry.getValue();
                }             
            }
        });

【问题讨论】:

    标签: android seekbar android-seekbar android-vertical-seekbar


    【解决方案1】:

    使用seekbarSetMax函数设置SecondSeekbar中的值。

    int step = 1; // set it accordingly if you want data in 3.1,3.2 range
    int max = 100;
    int min; // if you want to set min criteria too.
    
    shelfShareSeekbar.setOnSeekBarChangeListener(
        new OnSeekBarChangeListener()
        {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {}
    
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {}
    
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, 
                boolean fromUser) 
            {
                // Ex :
                // And finally set value of next seekbar based on firstone
    
    
     secondseekbar.setMax((max - progress) / step);
    
            }
        }
    );
    

    【讨论】:

    • 我使用了 setMax 方法,但在我的情况下,它使 seekbar 的最大值等于 100 中的剩余值。我不得不使用 setProgress 方法来克服这个问题。
    • 我把第一个 seekbar 拖到 60% 下一个不会超过 40% 这就是你想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多