運用Android Studio在開發app的過程中遇到的,想想是個普通問題但是在網上經過查詢後雖然清楚了導致問題的原因(下文有描述),但是卻沒有適合自己的解決方式,以下是本人根據個人需求給出的解決方案。
目標:
輸入數字後可以正常修改(設置的EditText只可輸入數字、小數點和none)
問題:
測試app在EditText中填入內容並刪除會導致:
情況一:退出當前Activity
情況二:程序崩潰
解決方法:
第一步:
//設置editText對象的鍵位監聽事件
editText.setOnkeyListener(new View.OnKeyListener(){
//重寫onKey方法監聽刪除鍵
@Override
public boolean onKey(View v,int keyCode,KeyEvent event){
//如果你按了刪除鍵
if(keyCode == KeyEvent.KEYCODE_DEL){
//獲取當前editText中的內容
String text = editText.getText().toString();
//判斷text中是否有內容
if(0<text.length()){
//判斷text中是否只有一個字符
if(0 == text.length()-1){
//如果只有一個則直接令editText爲"",即none
editText.setText("");
//將焦點置於第0位,即最開始
editText.setSelection(0);
}else{
//否則刪除該字段的最後一個字符並將刪除後的結果賦予newText
String newText = text.substring(0,text.length()-1);
//顯示newText中的內容
editText.setText(newText);
//設置焦點在該字段最後
editText.setSelection(newText.length());
}
}
return true;
}
return false;
}
});
提示:這裏的editText在定義調用時需要加’final’
第二步:
//對editText對象的內容變化進行監聽
editText.addTextChangedListener(new TextWatcher() {
@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) {
//判斷內容是否爲""
if(s.toString().equals("")){
//如果是則直接讓成員變量putNumber爲0
TransferActivity.this.putNumber=0;
}else{
//如果不是則將字符串類型轉換成Double類型並賦給pubNumber
TransferActivity.this.putNumber=Double.parseDouble(s.toString());
}
}
});
tips:這裏提到的’putNumber’是從editText中獲取的數字,用於之後的運算與此問題無關
由此就解決了當前的問題。退出Activity是因爲按鍵衝突,需要我們在onKey方法中加上對刪除鍵(KEYCODE_DEL)的判斷,而系統崩潰是由於自己的原因,當刪除最後一個字符後,執行afterTextChanged方法,之前方法裏我是這麼寫的:
當s爲""時怎麼可以將其轉變成Double類型呢?還是因爲自己當時沒有考慮到。
最後效果:
不會再出現退出當前Activity的情況~