NumberPicker Widget'ını Dizelerle Kullanma


98

Tamsayılar yerine dizeleri seçmek için Android NumberPicker widget'ını kullanmanın bir yolu var mı?

Yanıtlar:


245
NumberPicker picker = new NumberPicker(this);
picker.setMinValue(0);
picker.setMaxValue(2);
picker.setDisplayedValues( new String[] { "Belgium", "France", "United Kingdom" } );

3
Benim için anahtar, çalışmadan önce görüntülenen Değerleri VE minimum ve maksimum değerleri ayarlamanız gerektiğiydi. Teşekkürler.
Ben Clayton

Bu, yukarıda seçilen cevaptan çok daha iyi.
Linh Lino

2
Ancak metne tıkladığımda, yumuşak klavye açılıyor ve metni düzenleyebiliyorum.
2014

14
@ArulxZ Bunu daha önce çözmediyseniz, sadece picker.setDescendantFocusability (ViewGroup.FOCUS_BLOCK_DESCENDANTS) çağırın; klavyenin açılmasını önlemek için.
Karim Varela

Bu bana yardımcı oldu! Ama 0 değeri görünüyor ve onu kaldıramıyorum .. Herhangi bir fikriniz var mı?
Seçicimde

38
NumberPicker numberPicker = new NumberPicker(this);
String[] arrayString= new String[]{"hakuna","matata","timon","and","pumba"};
numberPicker.setMinValue(0);
numberPicker.setMaxValue(arrayString.length-1);

numberPicker.setFormatter(new NumberPicker.Formatter() {
  @Override
  public String format(int value) {
    // TODO Auto-generated method stub
    return arrayString[value];
  }
});

umarım yardımcı olur!


Bu açık ara en iyi cevap.
samatron

bir diziyse, size () ve get () yöntemlerine sahip değildir. size (), .length ile ve get (), arrayString [değer] ile değiştirilmelidir
RexSplode

Bunun yerine formatlayıcı kullanırsanız setDisplayedValues, NumberPicker genişliğini doğru ölçmez, bu nedenle metniniz düzgün sığabilse bile kırpılabilir.
Matvey Rybakov

15
String value = String.valueOf(picker.getValue());

Başka bir şey kastetebilirsin ama ne demek istediğin çok açık değil.

GÜNCELLENMİŞ:

Kendi biçimlendiricinizi ayarlayarak sahte yapabilirsiniz:

CountryFormatter implements Formatter {
    public String toString(int value) {
        switch(value) {
            case 0:
                return "England";
            case 1:
                return "France";
        }
        return "Unknown";
    }
}

picker.setFormatter(new CountryFormatter());

getValue () yine de bir int döndürür, bu nedenle muhtemelen ülkelerin adlarını kimliklerine eşlemek istersiniz.

EKLENDİ: NumberPicker uygulamasında şunlar bulunur:

public void setRange(int start, int end, String[] displayedValues)

Görünüşe göre, istediğiniz şey için daha iyi bir iş çıkarıyor, sonra yukarıdaki biçimlendiriciden .. belgelerde bahsedilmemesine rağmen, muhtemelen genel API'nin bir parçası değildir


Örneğin bir ülke seçmek için kullanmak istiyorum. Tıpkı Spinner Widget'ın yaptığı gibi, ancak bir değer seçmek için altta ek bir çerçeve açmadan.
timoschloesser

Yanıt güncellendi, ancak bu tür şeyleri yapmak için NumberPicker'ı hacklemeye çalışmaktan muhtemelen ülkeleri listelemenin daha iyi yolları var.
FunkTheMonk

@FunkTheMonk Bu setRange()yöntemi belgelerde hiç bulamadım ! Herhangi bir fikriniz neden?
iTurki

Belgelendirilmiş yöntemlerin hiçbiri genel API'nin parçası değildir - resmi olarak google tarafından desteklenmezler ve muhtemelen gelecekte değişeceklerdir - riski size ait olmak üzere kullanırsınız.
FunkTheMonk

1
Benim durumumda, bu çözümün küçük bir hatası vardı, seçeneklerden birine dokunduğumda parladı veya kayboldu, nedenini çok iyi bilmiyorum. nan'ın cevabında bu sorun yoktu. Biri bana neler olabileceğini söyleyebilir mi? Her neyse, sanırım nan'in cevabı daha iyi ve kabul edilen cevap olmalı. Ama belki bir şeyi kaçırıyorum?
acrespo

8

bu çözümü deneyin, size yardımcı olabilir

    NumberPicker pickers = new NumberPicker(this);
    String[] arrayPicker= new String[]{"abc","def","ghi","jkl","mno"};

    //set min value zero
    pickers.setMinValue(0);
    //set max value from length array string reduced 1
    pickers.setMaxValue(arrayPicker.length - 1);
    //implement array string to number picker
    pickers.setDisplayedValues(arrayPicker);
    //disable soft keyboard
    pickers.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
    //set wrap true or false, try it you will know the difference
    pickers.setWrapSelectorWheel(false);

    //create button to test selected text string
    btnPicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //get position (int) from number picker
            int pos = pickers.getValue();
            //get string from number picker and position
            String selecPicker = arrayPicker[pos];  
            //test toast to get selected text string
            Toast.makeText(context, selecPicker , Toast.LENGTH_SHORT).show();

        }
    });

0

Bu benim için çalıştı.

public class YourClassName extends AppCompatActivity {

NumberPicker picker = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout_file);

    picker = (NumberPicker) findViewById(R.id.pickerId_From_your_Layout_file);

     picker.setMinValue(0);
    picker.setMaxValue(3);
    picker.setDisplayedValues(new String[]{"English", "French","Kiswahili","عربى"});
}
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.