簡體   English   中英

即使失去焦點,我如何測試EditText的用戶內容?

[英]How do I test EditText for user content even after it loses focus?

我有一個簡單的UI屏幕,供用戶在EditText行中輸入數據,然后在第二EditText行中輸入日期。 我有一個ListenerEditText.java文件,用於監聽后退按鈕的按下。 問題是,當用戶在第一行EditText行上輸入數據,然后焦點移至第二行EditText行時,該代碼不再正確捕獲后退按鈕的按下,因為它無法識別出在第一行EditText行上輸入了數據-出現僅檢查第二行EditText行上是否有數據。 當按下后退按鈕時,我希望代碼識別出第一行EditText行和/或第二行EditText行上有數據,然后啟動DialogFragment來確認用戶是否會丟失輸入的數據。 當前,該代碼無法“看到”第一條EditText行上的數據,並且如果第二條EditText行上沒有數據,則會錯誤地將用戶帶回到上一個屏幕。

Activity.java:

import static com.example.jdw.secondscreen.ListenerEditText.KeyImeChange;

public class CardViewActivity extends AppCompatActivity {

   private ListenerEditText myListenerEditText;
   private ListenerEditText dListenerEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cardviewinput);

        myListenerEditText = (ListenerEditText)findViewById(R.id.CEditText);
        dListenerEditText = (ListenerEditText) findViewById(R.id.DEditText);

        myListenerEditText.setKeyImeChangeListener(new KeyImeChange() {

        @Override
        public boolean onKeyIme(int keyCode, KeyEvent event) {
         int stringToDo = myListenerEditText.getText().toString().trim().length();

            if(stringToDo>0) {
                FragmentManager fm = getSupportFragmentManager();
                CreateSkycardFragment editNameDialog = new CreateSkycardFragment();
                editNameDialog.show(fm, "skycard_dialog");
                return false;
            }
            // if "dstringToDo" does not have data (the EditText input line is blank)
            // then just cancel the soft keyboard and go to the previous activity.
            else {
                InputMethodManager imm = (InputMethodManager)
                   getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(myListenerEditText.getWindowToken(), 0);
                return false;
            }
        }
    });

        dListenerEditText.setKeyImeChangeListener(new KeyImeChange() {

        @Override
        public boolean onKeyIme(int keyCode, KeyEvent event) {
            int dstringToDo = dListenerEditText.getText().toString().trim().length();
            // If the EditText input line has data ("stringToDo") and the user presses the Back button,
            // then launch the DialogFragment to see if they really want to delete the data and
            // go back to the previous activity.
            if(dstringToDo>0) {
                FragmentManager fm = getSupportFragmentManager();
                CreateSkycardFragment editNameDialog = new CreateSkycardFragment();
                editNameDialog.show(fm, "skycard_dialog");
                return false;
            }
            // if "dstringToDo" does not have data (the EditText input line is blank)56
            // then just cancel the soft keyboard and go to the previous activity.
            else {
                InputMethodManager imm = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(dListenerEditText.getWindowToken(), 0);
                return false;
            }
        }
    });

...

你可以做這樣的事情,

EditText edit = (EditText)getActivity.findViewById(R.id.your id here);
String abcd=edit.getText().toString();

並在第一個編輯文本上進行驗證,設置錯誤和其他操作。

我使用了兩個選項首先與@war_Hero相同

第一
/ 在您的edittext中添加驗證 /

        myListenerEditText.setError(null);

        /** Validation of View Widget **/
        if (myListenerEditText.getText().toString().equalsIgnoreCase("")) {
            myListenerEditText.requestFocus();
            myListenerEditText.setError("Please enter your name.");
        }

        // Second option

    myListenerEditText = (EditText) rootView.findViewById(your id);
    //add addTextChangedListener to your editText and define one boolean variable  boolean showPopUp=false
    myListenerEditText.addTextChangedListener(watcher);


    TextWatcher watcher = new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1,int i2) {
        showPopUp = true;// whenever text changed make showPopUp= true;
    }
    @Override
    public void afterTextChanged(Editable editable) {           
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {    

    }

};

 //and then override onBackPressed

 @Override
public void onBackPressed() {

    if (showPopUp) {
        showPopUpMessage();// showPopUpMessage will show dialog 

    }else{
        finish();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM