2015-10-10 20 views
5

this gibi bir tekerlekli seçici yapmaya çalışıyorum Bu projeyi indirmeyi denedim ancak .zip dosyasında bulunan tek dosyalar, wheel-demo.apk ve notes.txt. Notes.txt'in bu dosyayı android stüdyosuyla nasıl kullanacağı konusunda herhangi bir talimatı yoktur. Aynı efekti oluşturmak için ListViews kullanarak önerdi bir yazı buldum. Kendi yaptığımı yapmaktan başka bir gün internette arama yapmak için harcadım ve kaynak kodunu here buldum ama dosyalarımı projeme aktardığımda IDE düzinelerce hata gösterdi. Deneme ve hata yoluyla 3 hatadan fazlasını düzeltmeyi başardım. Ben
MainActivity.java aşağıdaki ilgili kodu koyduk eminim:Tekerlek toplayıcı nasıl yapılır

OnWheelScrollListener scrolledListener = new OnWheelScrollListener() 
{ 
    public void onScrollingStarted(WheelView wheel) 
    { 
     wheelScrolled = true;// "Cannot resolve symbol wheelScrolled 
    } 

    public void onScrollingFinished(WheelView wheel) 
    { 
     wheelScrolled = false;// "Cannot resolve symbol wheelScrolled 
     updateStatus(); 
    } 
}; 

// Wheel changed listener 
private final OnWheelChangedListener changedListener = new OnWheelChangedListener() 
{ 
    public void onChanged(WheelView wheel, int oldValue, int newValue) 
    { 
     if (!wheelScrolled)// "Cannot resolve symbol wheelScrolled 
     { 
      updateStatus(); 
     } 
    } 
}; 
private void initWheel1(int id) 
{ 
    WheelView wheel = (WheelView) findViewById(id); 
    wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1)); //cannot resolve method 'setAdapter(com.projectname.ArrayWheelAdapter<Java.lang.String>) 
    wheel.setVisibleItems(2); 
    wheel.setCurrentItem(0); 
    wheel.addChangingListener(changedListener); 
    wheel.addScrollingListener(scrolledListener); 
} 

OnWheelScrollListener.java:

public interface OnWheelScrollListener { 
/** 
* Callback method to be invoked when scrolling started. 
* @param wheel the wheel view whose state has changed. 
*/ 
void onScrollingStarted(WheelView wheel); 

/** 
* Callback method to be invoked when scrolling ended. 
* @param wheel the wheel view whose state has changed. 
*/ 
void onScrollingFinished(WheelView wheel);} 

OnWheelChangedListener.java:

public interface OnWheelChangedListener { 
    /** 
    * Callback method to be invoked when current item changed 
    * @param wheel the wheel view whose state has changed 
    * @param oldValue the old value of current item 
    * @param newValue the new value of current item 
    */ 
    void onChanged(WheelView wheel, int oldValue, int newValue); 
} 

ArrayWheelAdapter.java

public class ArrayWheelAdapter<T> extends AbstractWheelTextAdapter { 

    // items 
    private T items[]; 

    /** 
    * Constructor 
    * @param context the current context 
    * @param items the items 
    */ 
    public ArrayWheelAdapter(Context context, T items[]) { 
     super(context); 

     //setEmptyItemResource(TEXT_VIEW_ITEM_RESOURCE); 
     this.items = items; 
    } 

    @Override 
    public CharSequence getItemText(int index) { 
     if (index >= 0 && index < items.length) { 
      T item = items[index]; 
      if (item instanceof CharSequence) { 
       return (CharSequence) item; 
      } 
      return item.toString(); 
     } 
     return null; 
    } 

    @Override 
    public int getItemsCount() { 
     return items.length; 
    } 
} 

.Java dosyalarının üçü de MainActivitesindeki içe aktarma listesine eklenmiş, sorunu çözebileceğini düşünüyordu. Şimdiye kadar tavsiye ettiğiniz için teşekkür ederiz.

+0

bu şekilde çalıştın? –

+0

Bu şekilde ne demek istiyorsun? Mesajdaki kod, bahsettiğim kaydırma sorununa girmeden önce vardığım kadarıyla. Android studio, indirdiğim .zip'ten çıkardığım dosyalardan hiçbir şey alamadı. –

+0

Tüm projeyi "Github'a Aktar" düğmesini kullanarak https://code.google.com/p/android-wheel/ adresinden GitHub'a aktarabilirsiniz. Bu, Android Studio'ya içe aktarmayı kolaylaştırır. – Kuffs

cevap

7

deneyin bu

public class MainActivity extends Activity 
    { 
     // TODO: Externalize string-array 
     String wheelMenu1[] = new String[]{"name 1", "name 2", "name 3", "name 4", "name 5", "name 6","name 7","name 8","name 9"}; 
     String wheelMenu2[] = new String[]{"age 1", "age 2", "age 3"}; 
     String wheelMenu3[] = new String[]{"10", "20","30","40","50","60"}; 

     // Wheel scrolled flag 
     private boolean wheelScrolled = false; 

     private TextView text; 
     private EditText text1; 
     private EditText text2; 
     private EditText text3; 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
      { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 

       initWheel1(R.id.p1); 
       initWheel2(R.id.p2); 
       initWheel3(R.id.p3); 

       text1 = (EditText) this.findViewById(R.id.r1); 
       text2 = (EditText) this.findViewById(R.id.r2); 
       text3 = (EditText) this.findViewById(R.id.r3); 
       text = (TextView) this.findViewById(R.id.result); 
      } 

     // Wheel scrolled listener 
     OnWheelScrollListener scrolledListener = new OnWheelScrollListener() 
      { 
       public void onScrollStarts(WheelView wheel) 
        { 
         wheelScrolled = true; 
        } 

       public void onScrollEnds(WheelView wheel) 
        { 
         wheelScrolled = false; 
         updateStatus(); 
        } 
      }; 

     // Wheel changed listener 
     private final OnWheelChangedListener changedListener = new OnWheelChangedListener() 
      { 
       public void onChanged(WheelView wheel, int oldValue, int newValue) 
        { 
         if (!wheelScrolled) 
          { 
           updateStatus(); 
          } 
        } 
      }; 

     /** 
     * Updates entered PIN status 
     */ 
     private void updateStatus() 
      { 
       text1.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()]); 
       text2.setText(wheelMenu2[getWheel(R.id.p2).getCurrentItem()]); 
       text3.setText(wheelMenu3[getWheel(R.id.p3).getCurrentItem()]); 

       text.setText(wheelMenu1[getWheel(R.id.p1).getCurrentItem()] + " - " + wheelMenu2[getWheel(R.id.p2).getCurrentItem()] + " - " + wheelMenu3[getWheel(R.id.p3).getCurrentItem()]); 
      } 

     /** 
     * Initializes wheel 
     * 
     * @param id 
     *   the wheel widget Id 
     */ 

     private void initWheel1(int id) 
      { 
       WheelView wheel = (WheelView) findViewById(id); 
       wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu1)); 
       wheel.setVisibleItems(2); 
       wheel.setCurrentItem(0); 
       wheel.addChangingListener(changedListener); 
       wheel.addScrollingListener(scrolledListener); 
      } 

     private void initWheel2(int id) 
      { 
       WheelView wheel = (WheelView) findViewById(id); 
       wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu2)); 
       wheel.setVisibleItems(2); 
       wheel.setCurrentItem(0); 
       wheel.addChangingListener(changedListener); 
       wheel.addScrollingListener(scrolledListener); 
      } 

     private void initWheel3(int id) 
      { 
       WheelView wheel = (WheelView) findViewById(id); 

       wheel.setAdapter(new ArrayWheelAdapter<String>(wheelMenu3)); 
       wheel.setVisibleItems(2); 
       wheel.setCurrentItem(0); 
       wheel.addChangingListener(changedListener); 
       wheel.addScrollingListener(scrolledListener); 
      } 

     /** 
     * Returns wheel by Id 
     * 
     * @param id 
     *   the wheel Id 
     * @return the wheel with passed Id 
     */ 
     private WheelView getWheel(int id) 
      { 
       return (WheelView) findViewById(id); 
      } 

     /** 
     * Tests wheel value 
     * 
     * @param id 
     *   the wheel Id 
     * @param value 
     *   the value to test 
     * @return true if wheel value is equal to passed value 
     */ 
     private int getWheelValue(int id) 
      { 
       return getWheel(id).getCurrentItem(); 
      } 
    } 

main.xml Ayrıca

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:background="@drawable/layout_bg"> 


    <LinearLayout 
     android:layout_marginTop="24dp" 
     android:layout_gravity="center_horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <com.example.wheel.WheelView 
      android:id="@+id/p1" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" /> 
     <com.example.wheel.WheelView 
      android:id="@+id/p2" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" /> 
     <com.example.wheel.WheelView 
      android:id="@+id/p3" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" /> 
    </LinearLayout> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_gravity="center_horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="24dp"> 
     <EditText 
      android:id="@+id/r1" 
      android:layout_width="100dip" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="24dp" 
      android:layout_gravity="center_horizontal" 
      android:textSize="18sp" 
      android:textColor="#000"> 
     </EditText> 
     <EditText 
      android:id="@+id/r2" 
      android:layout_width="80dip" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="24dp" 
      android:layout_gravity="center_horizontal" 
      android:textSize="18sp" 
      android:textColor="#000"> 
     </EditText> 
     <EditText 
      android:id="@+id/r3" 
      android:layout_width="80dip" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="24dp" 
      android:layout_gravity="center_horizontal" 
      android:textSize="18sp" 
      android:textColor="#000"> 
     </EditText> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/result" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="24dp" 
     android:layout_gravity="center_horizontal" 
     android:textSize="18sp" 
     android:textColor="#FFF" 
     android:text="Your choice"> 
    </TextView> 
</LinearLayout> 

deneyin bu demo

enter image description here

+0

Bazı kodları sağladığınız için teşekkür ederim, bunu projeye dahil etmeye çalışacağım. Bir şey olsa da, bazıları ithal kodlara bağlı gibi görünüyor. Çalıştığım dümen demo projesini alamadım, umarım bu kod bu projeye bağlı değildir. –

+0

Çok fazla "sembolü 'rastgele sembolü çözemedim' vardı" "Bunun nedeni, tekerlekli toplayıcının projeye düzgün bir şekilde aktarılmamasından kaynaklanıyordu. Bu öğretici http://tolkianaa.blogspot.mx/2012/03/do-not-try-to-reinvent-wheel.html bulundu. Android Studio projeme aktarılan doğru dosyaları almayla ilgili hiçbir yardım almadım. –

+0

tamam, nihayet GitHub'dan çarkı projemde çalıştı ve en üstteki kod kutusundaki bir satır çalışıyor. satır: wheel.setAdapter (yeni ArrayWheelAdapter (wheelMenu1)); Şu anda saatlerce projemden bakıyordum ve bu kod satırının neden IDE hataları olduğunu gösteremiyorum –

23

sadece kullanabilirsiniz default NumberPicker API 11. You beri Android'de dahil herhangi bir Strin gösterebilir NumberPicker # setDisplayedValues ​​kullanarak istediğiniz gs.

XML:

<NumberPicker 
     android:id="@+id/number_picker" 
     android:layout_width="match_parent" 
     android:layout_height="180dp" /> 

Java:

String[] data = new String[]{"Berlin", "Moscow", "Tokyo", "Paris"}; 
    picker.setMinValue(0); 
    picker.setMaxValue(data.length-1); 
    picker.setDisplayedValues(data); 

Ekran Görüntüsü:

NumberPicker displaying Cities

+0

Bahşiş için teşekkür ederim. Bir dahaki sefere bu şekilde deneyeceğim. –

+2

[API düzeyinde 11 eklendi] (https://developer.android.com/reference/android/widget/NumberPicker.html). –

+0

@ Mir-Ismaili Teşekkürler. Onu düzeltti. – plexus

İlgili konular