Есть 3 поля. когда заполняется поле №1 фокус перескакивает на поле №2 . нужно что бы при нажатии backspace (или ввести но потом вытереть все символы )в №2 фокус перескакивал обратно в поле №1
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.Button;
import android.widget.EditText;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
public class MainActivity extends AppCompatActivity {
private EditText et1, et2, et3;
private int g;
// create a textWatcher member
private TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
checkFieldsForEmptyValues();
}
};
private GoogleApiClient client;
void checkFieldsForEmptyValues() {
Button b = (Button) findViewById(R.id.button);
String s1 = et1.getText().toString();
String s2 = et2.getText().toString();
String s3 = et3.getText().toString();
if (s1.length() == 19 && s2.length() == 5 && s3.length() == 3) {
b.setEnabled(true);
} else {
b.setEnabled(false);
}
}
public static boolean lunaCheck(String ccNumber) {//luna algoritm
int sum = 0;
String ccNumberFormatInt = ccNumber.replaceAll(" ", "");
boolean alternate = false;
for (int i = ccNumberFormatInt.length() - 1; i >= 0; i--) {
int n = Integer.parseInt(ccNumberFormatInt.substring(i, i + 1));
if (alternate) {
n *= 2;
if (n > 9) {
n = (n % 10) + 1;
}
}
sum += n;
alternate = !alternate;
}
return (sum % 10 == 0);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 = (EditText) findViewById(R.id.editTextCardNumber);
et2 = (EditText) findViewById(R.id.editTextValidity);
et3 = (EditText) findViewById(R.id.editTextCVV);
et1.addTextChangedListener(mTextWatcher);
et2.addTextChangedListener(mTextWatcher);
et3.addTextChangedListener(mTextWatcher);
checkFieldsForEmptyValues();
final EditText editTextCardNumber = (EditText) findViewById(R.id.editTextCardNumber);
final EditText editTextValidity = (EditText) findViewById(R.id.editTextValidity);
final EditText editTextCVV = (EditText) findViewById(R.id.editTextCVV);
editTextCardNumber.addTextChangedListener(new TextWatcher() {//поле №1
int mCountBefore;
int mCountAfter;
int mStartNumber;
public static final char SPACING_CHAR = '-';
private static final String EMPTY_STRING = "";
private static final String WHITE_SPACE = " ";
private String lastSource = EMPTY_STRING;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mCountBefore = count;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCountAfter = count;
mStartNumber = start;
}
@Override
public void afterTextChanged(Editable s) {//cardnumber
String source = s.toString();
if (!lastSource.equals(source)) {
source = source.replace(WHITE_SPACE, EMPTY_STRING);
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < source.length(); i++) {
if (i > 0 && i % 4 == 0) {
stringBuilder.append(WHITE_SPACE);
}
stringBuilder.append(source.charAt(i));
}
lastSource = stringBuilder.toString();
s.replace(0, s.length(), lastSource);
if (s.length()==19 && !lunaCheck(String.valueOf(s))) {
editTextCardNumber.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
}else if (s.length()==19 && lunaCheck(String.valueOf(s))) {
editTextValidity.requestFocus();
editTextCardNumber.getBackground().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
}
}
}
});
editTextValidity.addTextChangedListener(new TextWatcher() {//поле №2
int mCountBefore;
int mCountAfter;
int mStartNumber;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mCountBefore = count;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCountAfter = count;
mStartNumber = start;
}
@Override
public void afterTextChanged(Editable s) {
if (mCountAfter > mCountBefore && mStartNumber == 0) {
if(s.toString().equals("0")|s.toString().equals("1")){
}
else {
System.out.println(s.toString());
editTextValidity.removeTextChangedListener(this);
editTextValidity.setText("0" + s+"/");
editTextValidity.addTextChangedListener(this);
editTextValidity.setSelection(3);
}
}
if (mCountAfter > mCountBefore && mStartNumber == 1) {
if(s.toString().equals("01")|s.toString().equals("02")|s.toString().equals("03")|s.toString().equals("04")|s.toString().equals("05")|s.toString().equals("06")|s.toString().equals("07")|s.toString().equals("08")|s.toString().equals("09")|s.toString().equals("10")|s.toString().equals("11")|s.toString().equals("12")){
s.append("/");
}
else{
s.delete(s.length()-1, s.length());
}
} else if (mCountAfter < mCountBefore && mStartNumber == 2) {
s.delete(s.length()-1, s.length());
}
if (s.length() == 6) {
s.delete(s.length()-1, s.length());
editTextCVV.requestFocus();
}
}
});
editTextCVV.addTextChangedListener(new TextWatcher() {//edit text for CVV
int mCountBefore;
int mCountAfter;
int mStartNumber;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
mCountBefore = count;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mCountAfter = count;
mStartNumber = start;
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 4) {
s.delete(s.length() - 1, s.length());
}
}
});
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
}
Посмотрите в сторону TextWatcher. С его помощью вы сможете отследить ситуацию, когда текст в EditText появился, а затем опять был удален.
editText.addTextChangedListener(new TextWatcher() {
....
});
Но TextWatcher, скорее всего, не покажет нажатие backspace в изначально пустом EditText. Его можно поймать с помощью setOnKeyListener():
editText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_DEL) {
//this is for backspace
}
return false;
}
});
Переместить фокус на другую вьюху можно с помощью requestFocus()
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Ранее никогда не писал собственные интерфейсы для "упрощения жизни"Почему? Что в них такого интересного?
Доброе утроПишу функцию календаря, где есть 2 аргумента месяц и год