2015-07-06 27 views
1

我有一個簡單的用戶界面屏幕,用於在EditText行中輸入數據,然後在第二個EditText行中輸入日期。我有一個偵聽後退按鈕的ListenerEditText.java文件。問題是當用戶在第一個EditText行輸入數據,然後焦點移動到第二個EditText行時,代碼不再捕獲後退按鈕,因爲它無法識別數據是在第一個EditText行中輸入的 - 它顯示只檢查第二個EditText行是否有數據。當按下後退按鈕時,我希望代碼識別第一個EditText行和/或第二個EditText行上有數據,然後啓動DialogFragment以確認用戶是否會丟失輸入的數據。目前,代碼不會「看到」第一個EditText行上的數據,並且如果第二個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; 
      } 
     } 
    }); 

...

回答

0

你可以做這樣的事情,

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

,做什麼都驗證,設置錯誤和其他東西放在第一編輯文本。

+0

我不明白。在您的解決方案中使用「getActivity」是否有助於增加主鍵?如果是這樣,怎麼樣?我還需要確保第二個EditText已經過數據測試。是「字符串abcd ...」一個字符串還是你的意思是任何和所有的字符串? – AJW

+0

如果您在使用getActivity()方法的片段中使用它,則不使用getActivity()。如果您在活動中執行此操作,則使用findViewById() –

0

在兩個選項,我用第一個是相同@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(); 
    } 

}