Предотвратить редактирование текста от пустой - PullRequest
5 голосов
/ 27 декабря 2011

У меня есть следующий код, который я хочу использовать, чтобы убедиться, что мой текст редактирования не будет пустым. Поэтому, если первый нарисованный 0 (ноль) будет удален, он должен вернуться к 0 при изменении фокуса. Вот приложение на данный момент:

package your.test.two;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class TesttwoActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText edtxt = (EditText)findViewById(R.id.editText1);
        // if I don't add the following the app crashes (obviously):
        edtxt.setText("0");
        edtxt.setOnFocusChangeListener(new View.OnFocusChangeListener() {

            public void onFocusChange(View v, boolean hasFocus) {
                // TODO Auto-generated method stub
                update();   
            }
        });
    }

    public void update() {
        EditText edittxt = (EditText)findViewById(R.id.editText1);
        Integer i = Integer.parseInt(edittxt.getText().toString());
        // If i is an empty value, app crashes so if I erase the zero
        //on the phone and change focus, the app crashes
    }
}

Я попробовал следующее в методе update ():

String str = edittxt.getText().toString();
if (str == "") {
    edittxt.setText("0");
}

Но это не работает. Как я могу позволить редактировать текст никогда не будет пустым, вернуться к нулю, когда пусто, но не когда значение существует. Я уже убедился, что в тексте редактирования допускаются только числовые значения.

Ответы [ 2 ]

5 голосов
/ 27 декабря 2011
if(str.equals("")){
    edittxt.setText("0");
}

WarrenFaith прав.Обратитесь к этому сообщению, чтобы узнать больше об этой проблеме: Java String.equals против ==

0 голосов
/ 27 декабря 2011

Я бы порекомендовал окружить ваш parseInt вызов блоком try / catch, который перехватывает исключение NumberFormatException, которое, вероятно, является ошибкой (поскольку вы не указали, я могу только догадываться), поэтому это выглядит так:*

public void update() {
    EditText edittxt = (EditText)findViewById(R.id.editText1);
    Integer i;
    try {   
       i = Integer.parseInt(edittxt.getText().toString());
       // do something with i
    } catch (NumberFormatException e) {
       // log and do something else like notify the user or set i to a default value
    }    
}
...