2013-05-24 34 views
5

Tôi có một android Dialog với một bên là 3 numberpickers. Thay đổi bộ chọn thứ 3 sẽ kích hoạt thay đổi trong các giá trị được hiển thị của 2 2 pickers đầu tiên. Tuy nhiên, tôi đã nhận thấy khi tôi thay đổi các giá trị được hiển thị và gọiAndroid NumberPicker kết thúc tốt đẹp giá trị khi hiển thị giá trị được thay đổi

setWrapSelectorWheel(false) 

nó vẫn hiển thị các giá trị mới như được bọc trực quan (tôi có thể thấy giá trị cuối cùng trên giá trị đầu tiên).

Nếu tôi chạm vào bộ chọn, nó đột nhiên chụp vào bánh xe chọn không quấn. Điều lạ lùng là tôi gọi

getWrapSelectoWheel() 

sau khi đặt giá trị được hiển thị và trả về false ... giống như tôi đã đặt. Nhưng nhìn nó sai.

Bất kỳ ý tưởng gì đang xảy ra?

Rất cám ơn!

+0

Bạn đã bao giờ tìm thấy giải pháp chưa? Tôi vẫn đang đối phó với cùng một vấn đề, thiết lập bộ chọn lập trình đặt lại hình ảnh gói. – Gabriel

Trả lời

3

Tôi không biết bạn đang chạy phiên bản Android nào nhưng tôi khuyên bạn nên đọc source code for the NumberPicker (v4.2.2). Có lẽ bạn cần phải kích hoạt một cuộc gọi đến phương thức riêng tư initializeSelectorWheelIndices có thể được thực hiện thông qua cuộc gọi đến một số phương thức công khai.

Mặc dù tôi nghĩ rằng việc bạn sử dụng bộ chọn, bằng cách thay đổi phần lá cờ gói, có vẻ hơi khác thường. Bạn có muốn hành vi này nhất quán không? Trong trường hợp đó, thực hiện cuộc gọi đến setWrapSelectorWheel sau khi bạn đã đặt các giá trị tối thiểu và tối đa của mình và sau đó để lại một mình.

11

Tôi tìm thấy một giải pháp, Daniel đã đi đúng hướng, tuy nhiên dường như initializeSelectorWheelIndices thực sự là một điều xấu khi bạn đã đặt giá trị của mình. Bởi vì điều này, bạn cần phải gọi setMinValuesetMaxValue TRƯỚC KHI bạn đặt các giá trị của mình. Tuy nhiên, nếu bạn đã có một mảng được đặt trên bộ chọn của mình, nếu bạn gọi setMaxValue có giá trị cao hơn so với mảng hiện tại, nó sẽ cung cấp cho bạn một ngoại lệ ArrayIndexOutOfBounds.

Các giải pháp sau đó là để xóa các giá trị hiển thị cũ, thiết lập giá trị tối đa của bạn, sau đó bạn có thể gọi setWrapSelectorWheelsetDisplayValues:

public void updatePickerValues(String[] newValues){ 
    picker.setDisplayedValues(null); 
    picker.setMinValue(0); 
    picker.setMaxValue(newValues.length -1); 
    picker.setWrapSelectorWheel(false); 
    picker.setDisplayedValues(newValues); 
} 
+1

Công việc tốt. Đã làm cho tôi. –

1

tôi đã xác minh hành vi này cũng trên kitkat. Đó là một lỗi. Không thể tìm thấy báo cáo hiện tại để tôi tạo một báo cáo mới tại đây: bug# 98319

Mỗi câu trả lời trước tôi nhận thấy rằng thực hiện setWrapSelectorWheel (sai) cuộc gọi cuối cùng sau khi tất cả các cuộc gọi thiết lập sẽ hoạt động đối với hầu hết các trường hợp. Trong trường hợp của tôi, tôi đang thay đổi động giới hạn của NumberPicker khi người dùng tương tác và tôi không thể làm cho nó hoạt động 100%. Tôi đang chọn để sống với bộ chọn bọc.

Các vấn đề liên quan