2012-12-26 18 views
6

मेरे पास Edit Text है जिसमें संख्या केवल 0-59 के बीच हो सकती है, Edit Text में कोई अन्य नंबर टाइप नहीं किया जाएगा, मैंने text-watcher को आजमाया लेकिन सफलता प्राप्त नहीं हुई। कोई उपाय?Android में संपादन टेक्स्ट में केवल 0-59 से संख्याओं में टेक्स्ट को सीमित कैसे करें?

12-26 14:59:39.715: E/AndroidRuntime(19494): FATAL EXCEPTION: main 
12-26 14:59:39.715: E/AndroidRuntime(19494): java.lang.StackOverflowError 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.findViewTraversal(ViewGroup.java:2765) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewById(View.java:10442) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findViewShouldExist(View.java:4281) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.findUserSetNextFocus(View.java:4263) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.FocusFinder.findNextFocus(FocusFinder.java:66) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:569) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.ViewGroup.focusSearch(ViewGroup.java:571) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.View.focusSearch(View.java:4221) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.onCreateInputConnection(TextView.java:5378) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:977) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:932) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2958) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2882) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at com.fishing.MyLocation$check_lat_degree.onTextChanged(MyLocation.java:236) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.sendOnTextChanged(TextView.java:7226) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:3045) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.java:2907) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.EditText.setText(EditText.java:90) 
12-26 14:59:39.715: E/AndroidRuntime(19494): at android.widget.TextView.setText(TextView.j 
+0

अकेले टेक्स्टवॉचर आपके परिदृश्य को "प्रीकंडशन" "ऑन कंडीशन" और "पोस्ट कंडीशन" पर संभाल नहीं सकता है, बस आपको अपना स्वयं का कंडक्शन बनाना है और फिर इसे किसी भी 3 के साथ टेक्स्टवॉचर से जोड़ना है विधियां –

उत्तर

6

उपयोग एक्सएमएल में इस कोड संख्या केवल में संपादित पाठ अनुमति देने के लिए:

edittext.addTextChangedListener(new TextWatcher(){ 
    public void afterTextChanged(Editable s) {} 

    public void beforeTextChanged(CharSequence s, int start, int count, int after){} 

    public void onTextChanged(CharSequence s, int start, int before, int count){ 
     String strEnteredVal = edittext.getText().toString(); 

     if(!strEnteredVal.equals("")){ 
     int num=Integer.parseInt(strEnteredVal); 
     if(num<60){ 
     edittext.setText(""+num); 
     }else{ 
     edittext.setText(""); 
     } 
    } 

}); 
+2

धन्यवाद लेकिन यह 0-59 –

+0

के बीच कोई भी संख्या इनपुट करने के लिए अलगाव नहीं करेगा देखें मैंने अपना कोड संपादित किया है: –

+0

लेकिन इसकी देरी स्टैक ओवरफ़्लो त्रुटि? कोई उपाय? लाइन पर "edittext.setText (" "+ num);" –

0

पहले जोड़े इनपुट प्रकार:

<EditText android:id="@+id/edit_text_id" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:iputType="numbers" /> 

कि EditText में दर्ज किए गए पाठ मान नियंत्रित करने के लिए EditText के लिए इनपुट की संख्या को संख्या के रूप में सीमित करें।

editText.setInputType(InputType.TYPE_CLASS_NUMBER); 
    InputFilter[] FilterArray = new InputFilter[1]; 
    FilterArray[0] = new InputFilter.LengthFilter(2); 
    editText.setFilters(FilterArray); 

तो

एक TextWatcher क्या उपयोगकर्ता टाइपिंग की जाँच करने के लिए यदि मूल्य से अधिक 59 एक चेतावनी या किसी संदेश यह है कि नंबर होगा कम से कम 60.

editText.addTextChangedListener(new TextWatcher() { 
@Override 
public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 

    String added_number = editText.getText().toString(); 
    if (added_number.length != 0) { 
     int number = Integer.parseInt(added_number); 

     if (number > 59) 
      Toast.makeText(getApplicationContext, "Not more than 59", Toast.LENGTH_SHORT).show(); 
    } 

} 

@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub 

}); 
11

यहाँ है कैसे दिखाने है जोड़ने मुझे यह करना पसंद है:

public class InputFilterMinMax implements InputFilter { 
    private int min; 
    private int max; 

    public InputFilterMinMax(int min, int max) { 
     this.min = min; 
     this.max = max; 
    } 

    @Override 
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
     //noinspection EmptyCatchBlock 
     try { 
      int input = Integer.parseInt(dest.subSequence(0, dstart).toString() + source + dest.subSequence(dend, dest.length())); 
      if (isInRange(min, max, input)) 
       return null; 
     } catch (NumberFormatException nfe) { } 
     return ""; 
    } 

    private boolean isInRange(int a, int b, int c) { 
     return b > a ? c >= a && c <= b : c >= b && c <= a; 
    } 
} 

फिर फ़िल्टर को अपने संपादन टेक्स्ट पर सेट करें:

myEditText.setFilters(new InputFilter[]{new InputFilterMinMax(0, 59)}); 
+1

अच्छा जवाब .. + 1 मुझसे –

+0

यह 111 ~ 999 के लिए काम नहीं करता है। इसे कम से कम 11 के साथ काम करने के लिए कैसे बदला जाए? – SDG69

0
void addAddTextChangeListener(final EditText et) { 
     et.addTextChangedListener(new TextWatcher() { 
      boolean textModified = false; 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       String strEnteredVal = et.getText().toString(); 
       if(!strEnteredVal.equals("") && !(strEnteredVal.length() < 2)) { 
        int num = Integer.parseInt(strEnteredVal); 
        if (!textModified) { 
         if (num > 60) { 
          et.setText(""); 
         } else { 
          textModified = true; 
          et.setText("" + num); 
          et.setEnabled(false); 
         } 
        } 
       } 
      } 

     }); 
    } 

व एक्सएमएल फ़ाइल में EditText प्रविष्टि में android:inputType="number"। लेकिन यह कोड सही इनपुट प्राप्त होने के बाद काम करना बंद कर देता है, इसलिए इसके बाद आपको EditText निष्क्रिय करना चाहिए।

संबंधित मुद्दे