2013-03-20 1 views
0

Я создал один класс, в котором я хочу установить два разных счетчика для выбора даты. Я хочу это, потому что я хочу установить дату начала события и дату окончания события, так как я могу установить два разных счетчика с выбором даты в одном классе ??? заранее спасибо.Как создать два счетчика для выбора даты в одном классе в android?

+0

Добро пожаловать в SO..What вы пробовали ..? – Pragnani

+0

Я пытаюсь установить два разных счетчика с двумя разными выборами даты с spinner в одном классе .... потому что я хочу установить дату начала события и дату окончания события отдельно. – user2092132

ответ

0

Вот тройной выборщик чисел, используемый в некоторых моих приложениях. shoudl будет легко модифицировать его, чтобы использовать только два числа.

package com.t3hh4xx0r.nfcsecure.widgets;

import android.content.Context; 
import android.content.res.TypedArray; 
import android.preference.DialogPreference; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.NumberPicker; 

import com.t3hh4xx0r.nfcsecure.R; 

public class TripleNumberPickerPreference extends DialogPreference { 
    private static final String defaultPersistedString = "0:0:0"; 
    private NumberPicker hours = null; 
    private NumberPicker mins = null; 
    private NumberPicker secs = null; 

    View rootView; 

    public TripleNumberPickerPreference(Context ctxt) { 
     this(ctxt, null); 
    } 

    public TripleNumberPickerPreference(Context ctxt, AttributeSet attrs) { 
     this(ctxt, attrs, 0); 
    } 

    public TripleNumberPickerPreference(Context ctxt, AttributeSet attrs, int defStyle) { 
     super(ctxt, attrs, defStyle); 

     setPositiveButtonText("Set"); 
     setNegativeButtonText("Cancel"); 
    } 

    @Override 
    protected View onCreateDialogView() { 
     String[] nums = new String[61]; 

     for(int i=0; i<nums.length; i++) { 
      nums[i] = Integer.toString(i); 
     } 

     LayoutInflater lI = LayoutInflater.from(getContext()); 
     rootView = lI.inflate(R.layout.triple_number_picker, null); 
     hours = (NumberPicker) rootView.findViewById(R.id.hours); 
     mins = (NumberPicker) rootView.findViewById(R.id.minutes); 
     secs = (NumberPicker) rootView.findViewById(R.id.seconds); 

     hours.setMaxValue(24); 
     hours.setMinValue(0); 
     hours.setDisplayedValues(nums);  

     mins.setMaxValue(60); 
     mins.setMinValue(0); 
     mins.setDisplayedValues(nums); 

     secs.setMaxValue(60); 
     secs.setMinValue(0); 
     secs.setDisplayedValues(nums); 

     deconstructPersistedData(); 

     return (rootView); 
    } 

    private void deconstructPersistedData() { 
     hours.setValue(Integer.parseInt(getPersistedString(defaultPersistedString).split(":")[0])); 
     mins.setValue(Integer.parseInt(getPersistedString(defaultPersistedString).split(":")[1])); 
     secs.setValue(Integer.parseInt(getPersistedString(defaultPersistedString).split(":")[2])); 
    } 

    private String buildPersistedData() { 
     StringBuilder sB = new StringBuilder(); 
     sB.append(hours.getValue()); 
     sB.append(":"); 
     sB.append(mins.getValue()); 
     sB.append(":"); 
     sB.append(secs.getValue()); 
     sB.append(":"); 

     long timeTillNextSecureLock = buildTimeTillSecureLock(); 
     Log.d("TIME TILL NEXT LOCK SET", ""+timeTillNextSecureLock); 
     sB.append(timeTillNextSecureLock); 
     return sB.toString(); 
    } 

    private long buildTimeTillSecureLock() { 
     double hoursSimple = hours.getValue(); 
     double minsSimple = mins.getValue(); 
     double secsSimple = secs.getValue(); 

     double secsToMillis = 1000; 
     double minsToMillis = 60000; 
     double hoursToMillis = 3600000; 

     double secsAsMills = secsSimple * secsToMillis; 
     double minsAsMills = minsSimple * minsToMillis; 
     double hoursAsMills = hoursSimple * hoursToMillis; 

     return (long) (secsAsMills + minsAsMills + hoursAsMills); 
    } 

    @Override 
    protected void onBindDialogView(View v) { 
     super.onBindDialogView(v); 
    } 

    @Override 
    protected void onDialogClosed(boolean positiveResult) { 
     super.onDialogClosed(positiveResult); 
     String persisted = buildPersistedData(); 

     if (positiveResult) { 
      if (callChangeListener(persisted)) { 
       persistString(persisted); 
       notifyChanged(); 
      } 
     } 
    } 

    @Override 
    protected Object onGetDefaultValue(TypedArray a, int index) { 
     return defaultPersistedString; 
    } 

     public static long subAndCheck(long a, long b) { 
      long ret; 
      String msg = "overflow: subtract"; 
      if (b == Long.MIN_VALUE) { 
       if (a < 0) { 
        ret = a - b; 
       } else { 
        throw new ArithmeticException(msg); 
       } 
      } else { 
       ret = addAndCheck(a, -b, msg); 
      } 
      return ret; 
     } 

     private static long addAndCheck(long a, long b, String msg) { 
      long ret; 
      if (a > b) { 
       ret = addAndCheck(b, a, msg); 
      } else {    
       if (a < 0) { 
        if (b < 0) { 
         if (Long.MIN_VALUE - b <= a) { 
          ret = a + b; 
         } else { 
          throw new ArithmeticException(msg); 
         } 
        } else { 
         ret = a + b; 
        } 
       } else { 
        if (a <= Long.MAX_VALUE - b) { 
         ret = a + b; 
        } else { 
         throw new ArithmeticException(msg); 
        } 
       } 
      } 
      return ret; 
     } 
} 

И раскладка -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/TextView01" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:layout_weight="1" 
      android:text="@string/hours" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:gravity="center" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/minutes" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:layout_weight="1" 
      android:text="@string/seconds" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <NumberPicker 
      android:id="@+id/hours" 
      android:layout_width="0dp" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="3dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <NumberPicker 
      android:id="@+id/minutes" 
      android:layout_width="0dp" 
      android:layout_marginLeft="2dp" 
      android:layout_marginRight="3dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <NumberPicker 
      android:id="@+id/seconds" 
      android:layout_marginLeft="2dp" 
      android:layout_marginRight="5dp" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 
    </LinearLayout> 

</LinearLayout> 
+0

Можете ли вы, пожалуйста, помочь мне для выбора даты, на самом деле я новичок в android .. !! – user2092132

Смежные вопросы