onStop之后的onFocusChangeListener事件与Android中的EditText

时间:2016-11-22 04:13:40

标签: android

我正在使用onFocusChangeListner来跟踪用户何时在片段内编辑edittext。在某些情况下,根据用户输入,这会触发铃声警报以开始播放。铃声警报会一直持续,直到另一个事件触发它停止,例如edittext字段中的另一个编辑或者片段已退出,通过onStop()。 似乎onFocusChange监听器在onStop()之后再次被调用,这是有问题的,因为它可以再次触发铃声警报,即使应用程序关闭也不会停止。

onCreateView中,设置侦听器:

     mTextEdit = (EditText) rootView
            .findViewById(R.id.userInput);
     mTextEdit.setOnFocusChangeListener(this);

@Override
public void onStop() {
    super.onStop();
  // stop alarm from sounding if fragment is stopped.
    stopAlarm(); 
}

@Override
public void onFocusChange(View view, boolean hasFocus) {

    if (!hasFocus) { // Only do when exiting focus

        if (view.getId()==R.id.userInput)
          {   startAlarm(); // method to start ringtone alarm }
    }
}

private void startAlarm() {

    // stop existing ringtone
    if (mAlarmManager != null) {   stopAlarm();   }

    // set and play new ring tone
    try {
        Log.d(TAG, "Ringtone: " + mAlarmURI.toString());
        mAlarmManager = RingtoneManager.getRingtone(getActivity(), mAlarmURI);
        mAlarmManager.play();
        Log.d(TAG, "Alarm is playing");
    } catch (Exception e) {
        // failed to get/play ringtone
        e.printStackTrace();
    }
}

private void stopAlarm() {
    if (mAlarmManager != null)
        try {
            mAlarmManager.stop();
        } catch (Exception e) {
            // failed to stop ringtone
            e.printStackTrace();
            Log.d(TAG, "Failed to stop ringtone.");
        }
    mAlarmManager = null;
}

1 个答案:

答案 0 :(得分:0)

感谢Rushi,我想我有答案。它不漂亮。我需要在两个地方停止警报,onStop()和onDestroy()因为不同事件的状态周期可能不同。

如果用户导航到偏好设置并返回:

onPause()
onStop() - stop alarm here
onResume()

如果用户导航出片段:

onPause()
onStop() - stop alarm here
onFocusChange() - alarm is retriggered
onDestroy() - stop alarm again