我正在使用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;
}
答案 0 :(得分:0)
感谢Rushi,我想我有答案。它不漂亮。我需要在两个地方停止警报,onStop()和onDestroy()因为不同事件的状态周期可能不同。
如果用户导航到偏好设置并返回:
onPause()
onStop() - stop alarm here
onResume()
如果用户导航出片段:
onPause()
onStop() - stop alarm here
onFocusChange() - alarm is retriggered
onDestroy() - stop alarm again