Android App自定义数字选择器

时间:2015-04-27 19:35:47

标签: java android

所以我目前正在开发一款需要数字选择器的应用。我使用按钮textview +按钮布局创建了数字选择器。 t当你删除号码并尝试按下任何按钮时,选择器工作正常,此时应用程序崩溃。

public class MainActivity extends Activity implements OnClickListener {
Button btnUp, btnDown;
EditText editTextSonyResult;

int nStart = (-100);
int nEnd = 250;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnUp = (Button) findViewById(R.id.plusButton1);
    btnDown = (Button) findViewById(R.id.minusButton1);


    editTextSonyResult = (EditText) findViewById(R.id.numberView1);

    editTextSonyResult.setText("0");

    btnUp.setOnClickListener(this);
    btnDown.setOnClickListener(this);
}

public void onClick(View v) {
    String getString = String.valueOf(editTextSonyResult.getText());
    int current = Integer.parseInt(getString);


    if (v == btnUp) {
        if (current < nEnd) {

            current++;
            editTextSonyResult.setText(String.valueOf(current));
        }

    }
    if (v == btnDown) {
        if (current > nStart) {

            current--;
            editTextSonyResult.setText(String.valueOf(current));

        }
    }
}

任何帮助将不胜感激。 干杯

这里是错误点的logcat 04-27 19:58:10.042 3016-3016 / com.example.liam.sonyreportingapp D / AndroidRuntime:关闭VM 04-27 19:58:10.042 3016-3016 / com.example.liam.sonyreportingapp E / AndroidRuntime:FATAL EXCEPTION:main     处理:com.example.liam.sonyreportingapp,PID:3016     java.lang.NumberFormatException:无效的int:&#34;&#34;             在java.lang.Integer.invalidInt(Integer.java:138)             在java.lang.Integer.parseInt(Integer.java:358)             在java.lang.Integer.parseInt(Integer.java:334)             在com.example.liam.sonyreportingapp.MainActivity.onClick(MainActivity.java:42)             在android.view.View.performClick(View.java:4780)             在android.view.View $ PerformClick.run(View.java:19866)             在android.os.Handler.handleCallback(Handler.java:739)             在android.os.Handler.dispatchMessage(Handler.java:95)             在android.os.Looper.loop(Looper.java:135)             在android.app.ActivityThread.main(ActivityThread.java:5257)             at java.lang.reflect.Method.invoke(Native Method)             在java.lang.reflect.Method.invoke(Method.java:372)             在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

2 个答案:

答案 0 :(得分:1)

EditText将允许用户手动输入。如果您不希望用户具备此功能,请改为切换到TextView。

你的

崩溃了
int current = parseInt(getString);

因为如果你的EditText是空的,因为用户清除了该框,那么parseInt将返回NaN(不是数字),它不能存储为int,因此它会崩溃。

编辑:这是他们关闭Android键盘但处理空白时可能看起来的样子,不要忘记检查非数字条目而不仅仅是空白条目..

((EditText)findViewById(R.id.numberView1)).setOnEditorActionListener(new TextView.OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                    //CHECK USER INPUT HERE. IF BLANK SET BACK TO 0 or DO NOT UPDATE VALUE ETC
                return true;
            }
            //I think this is if user presses back instead of pressing done/ok but i've never added code here
            return false;
        }
    });

然后添加

android:imeActionId="@+id/IME_ACTION_SEND"

在XML中的EditText内

编辑:删除了问题。

另外,如果btnDown检查当前&gt;恩,而不是小于?或者当前&lt; n开始。我不相信你想要两者完全相同的检查。

答案 1 :(得分:0)

以防万一,这里是现有答案的替代方案,前段时间我创建了一个自定义的NumberPicker类,您可以将其添加到布局xml文件中:

Custom NumberPicker class on github