Android NumberPicker没有保存EditText更改

时间:2010-09-11 13:09:43

标签: android android-widget

我已将Android的NumberPicker小部件复制到我自己的应用程序中,但我遇到了一个问题......

当有人手动点击EditText并通过键盘更改它时,不会保存选择。是否有一些监听器可以实现检查并查看用户是否手动更改EditText以将其设置为当前?还是什么?

6 个答案:

答案 0 :(得分:37)

我发现这个解决方案在android-developers google group中丢失了一些地方:

对于android SDK NumberPicker小部件,只需使用:

myNumberPicker.clearFocus();

在你试图获得它的价值之前。 如果您的活动只有NumberPicker,可能是按钮或微调器,并且您编辑它并尝试单击其他位置,则其onFocusChangedListener将无法正确处理。所以你只需要在使用getValue()之前强制它失去焦点。对我来说就像一个魅力。

答案 1 :(得分:2)

我使用了Michael Novak号码选择器。尽管onEditorAction已经实现,但它没有正确设置输入。对我来说很简单的方法就是在getCurrent中的textView上调用validateInput。

/**
 * @return the current value.
 */
public int getCurrent() {
    validateInput(mText);
    return mCurrent;
}

答案 2 :(得分:1)

我使用numberpicker http://www.quietlycoding.com/?p=5遇到了同样的问题,我通过将OnKeyListener(而不是Junzi已经建议的OnEditorActionListener)添加到NumberPicker类来解决它。其他步骤也是如此:

  1. 让NumberPicker.java扩展OnKeyListener
  2. mText.setOnKeyListener(this); 添加到NumberPicker构造函数
  3. 实施OnKey:

  4. public boolean onKey(View v, int keyCode, KeyEvent event) {  
        validateInput(v);  
        return false;  
    }
    

答案 3 :(得分:1)

如果您使用的是Android4.0.x中的Android NumberPicker,则意味着您可以使用getValue()获取NumberPicker的值。 http://developer.android.com/reference/android/widget/NumberPicker.html#getValue()

这是在android 4.0.x中获取Numberpicker的简单方法......

final NumberPicker np = new NumberPicker(CustomizedListView.this); np.setMinValue(0); np.setMaxValue(100); np.setWrapSelectorWheel(true); 您可以使用np.getValue()方法获取值。

答案 4 :(得分:0)

您可以尝试将TextWatcher设置为EditText以执行相同操作,或者不允许用户手动输入值...

或者在那里保留一个OK按钮,只有当用户点击OK按钮时才从EditText中取出值

你试过这个样本吗?

http://www.quietlycoding.com/?p=5

答案 5 :(得分:0)

不确定您是否使用与我相同的Numberpicker:http://www.quietlycoding.com/?p=5。我试图将一个OnEditorActionListener添加到NumberClass,似乎它解决了我的问题。

  • 修改NumberPicker.java,让它扩展OnEditorActionListener。
  • mText.setOnEditorActionListener(this); 添加到NumberPicker构造函数
  • 实施 onEditorAction

    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        validateInput(v);
        return false;
    }
    

希望它有所帮助。