EditText關於刪除內容會導致App閃退或退出當前Activity的詳細解決方法

運用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的情況~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章