Git Product home page Git Product logo

Comments (11)

Carbs0126 avatar Carbs0126 commented on July 21, 2024

应该是可以的,但是我没有过多的对更改最小值进行测试,一般情况下固定最小值并使用

refreshByNewDisplayedValues(String[] display)

就能满足需要。

另外,好像NumberPicker是不能够设置最小值为负值的,只能大于等于0,动态的更改最小值后,小于最小值的那部分对应的值好像就不显示了。

对于NumberPickerView动态的改变最小值,我再进一步测测。如果需要动态的“去掉”数据list的起始的某一部分,可以使用refreshByNewDisplayedValues(String[] display),传入的参数为“去掉“头部部分数据的剩余部分

from numberpickerview.

huayicheng2015 avatar huayicheng2015 commented on July 21, 2024

目前可以肯定我使用的数据全是正数,且我确实需要更换最小值,如原显示数据为1,2,3,4,5,6,现在欲显示的数据为7,8,9,10,11,12

from numberpickerview.

Carbs0126 avatar Carbs0126 commented on July 21, 2024

刚才测试了一下,可以这样:
更新函数:

//输入一个最小值,输入连续的数,最大值自动按照(最小值+字符串数组长度-1)来确定
private void updateData(int newMinValue, String[] display) {
        int oldMinValue = picker.getMinValue();
        int oldMaxValue = picker.getMaxValue();
        int oldSpan = oldMaxValue - oldMinValue + 1;

        int newMaxValue = newMinValue + display.length - 1;
        int newSpan = newMaxValue - oldMinValue + 1;

        if (newSpan > oldSpan) {
            picker.setMinValue(newMinValue);
            picker.setDisplayedValues(display);
            picker.setMaxValue(newMaxValue);
        } else {
            picker.setMinValue(newMinValue);
            picker.setMaxValue(newMaxValue);
            picker.setDisplayedValues(display);
        }
    }

调用:

updateData(1,new String[]{"1","2","3","4","5","6"});
updateData(7,new String[]{"7","8","9","10","11","12","13","14"});

回调://与之前相同

@Override
    public void onValueChange(NumberPickerView picker, int oldVal, int newVal) {
        String[] content = picker.getDisplayedValues();
        if (content != null)
            Toast.makeText(getApplicationContext(),"oldVal : " + oldVal + " newVal : " + newVal + "\n" +
                    getString(R.string.picked_content_is) + content[newVal - picker.getMinValue()], Toast.LENGTH_SHORT)
                    .show();
    }

from numberpickerview.

huayicheng2015 avatar huayicheng2015 commented on July 21, 2024
int newSpan = newMaxValue - oldMinValue + 1

是不是应该改为

int newSpan = newMaxValue - newMinValue + 1

from numberpickerview.

Carbs0126 avatar Carbs0126 commented on July 21, 2024

对,我刚才测了一下,这个地方写错了

from numberpickerview.

huayicheng2015 avatar huayicheng2015 commented on July 21, 2024
if (newSpan > oldSpan) {
            picker.setMinValue(newMinValue);
            picker.setDisplayedValues(display);
            picker.setMaxValue(newMaxValue);
}

是不是应该改为

if (newSpan > oldSpan) {
            picker.setMinValue(newMinValue);
            picker.setMaxValue(newMaxValue);
            picker.setDisplayedValues(display);
}

from numberpickerview.

Carbs0126 avatar Carbs0126 commented on July 21, 2024

你的代码出错了吗?

            picker.setMaxValue(newMaxValue);
            picker.setDisplayedValues(display);

这两行代码如果交换位置,就可能出现"越界",因为如果新的数据的长度小于旧的数据,如果先设置maxValue,此时没有设置旧的数据displayvalues,maxValue可能就会超过旧数据的长度边界值,因此不要交换两者的顺序,这和android自带的NumberPicker的用法是一致的

from numberpickerview.

huayicheng2015 avatar huayicheng2015 commented on July 21, 2024

如果按我的改法就出现了:java.lang.IllegalArgumentException: (maxValue - mMinValue + 1) should not be greater than mDisplayedValues.length now (maxValue - mMinValue + 1) is 6 and mDisplayedValues.length is 4
如果按你的就出现了: java.lang.IllegalArgumentException: mMaxValue - mMinValue + 1 should not be greater than mDisplayedValues.length, now ((mMaxValue - mMinValue + 1) is 12 newDisplayedValues.length is 6, you need to set MaxValue and MinValue before setDisplayedValues(String[])

from numberpickerview.

huayicheng2015 avatar huayicheng2015 commented on July 21, 2024

都是从9,10,11,12---->1,2,3,4,5,6

from numberpickerview.

huayicheng2015 avatar huayicheng2015 commented on July 21, 2024

完整步骤:
1,2,3,4,5,6,7,8,9,10,11,12---->1,2,3,4,5,6---->9,10,11,12(---->1,2,3,4,5,6)
括号中的崩溃

from numberpickerview.

Carbs0126 avatar Carbs0126 commented on July 21, 2024

嗯,我刚才测了一下,确实是出错,这和设置minValue、maxValue、displayValues的顺序有关系,我稍微改了一下调用顺序,避免了这个出错问题,如下:

        if (newSpan > oldSpan) {
            picker.setDisplayedValues(display);//更改这两个函数的调用顺序
            picker.setMinValue(newMinValue);//更改这两个函数的调用顺序
            picker.setMaxValue(newMaxValue);
        } else {
            picker.setMinValue(newMinValue);
            picker.setMaxValue(newMaxValue);
            picker.setDisplayedValues(display);
        }

我这边暂时是不出错了,异常主要是因为minValue的值先改变了,再设置displayValue时会对比检查其长度与(maxValue-minValue),如果后者大于前者,就会主动抛出异常,这样也是便于差错

from numberpickerview.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.