Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用editText以(mm:ss)格式设置可变持续时间计时器?_Java_Android_Android Fragments_Timer_Countdowntimer - Fatal编程技术网

Java 如何使用editText以(mm:ss)格式设置可变持续时间计时器?

Java 如何使用editText以(mm:ss)格式设置可变持续时间计时器?,java,android,android-fragments,timer,countdowntimer,Java,Android,Android Fragments,Timer,Countdowntimer,说到java,我完全是个新手。 我以学习和人类行为为生,需要一款带有两种定时器的应用程序 这些计时器将生活在一个片段中 第一种计时器将接收用户输入(间隔-分钟、秒或两者)并倒计时。当达到零时,该计时器将重置为原始输入值并再次启动。用户还可以选择点击“重置”按钮,从原始输入值启动计时器(例如,如果输入的数字=5,5-4-3-2-1-0-5-4-3-3-reset-5-4-3-2-1-0) 第二类计时器将再次接受用户输入。当计时器启动时,它将从两个输入值之间的数字开始倒计时。用户可以选择点击“重置”

说到java,我完全是个新手。 我以学习和人类行为为生,需要一款带有两种定时器的应用程序

这些计时器将生活在一个片段中

第一种计时器将接收用户输入(间隔-分钟、秒或两者)并倒计时。当达到零时,该计时器将重置为原始输入值并再次启动。用户还可以选择点击“重置”按钮,从原始输入值启动计时器(例如,如果输入的数字=5,5-4-3-2-1-0-5-4-3-3-reset-5-4-3-2-1-0)

第二类计时器将再次接受用户输入。当计时器启动时,它将从两个输入值之间的数字开始倒计时。用户可以选择点击“重置”按钮,从0和输入的数字之间的新数字开始计时(例如,如果输入的数字范围=3和7,则为4-3-2-1-0-6-5-4-reset-1-0-7-6-reset-2-1-0)

现在我有一个计时器,它从固定的时间间隔开始以分钟为单位倒计时,但用户只能输入分钟,而不能输入秒(例如,如果按“1”,则设置01:00,如果按“130”,则仍然设置01:00。我希望用户可以选择设置01:30或00:30。)

任何帮助都将不胜感激

除了花6个小时观看YouTube视频、阅读论坛和浏览Android开发者网站外,我还尝试调整整数分钟=(int)(TimeLeftInMillis)和整数秒“”的除数,并尝试更改长毫秒的乘法值put=long.parseLong(input)*值。我也试过抱怨和诅咒

mButtonSet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(android.view.View view) {
                String input = mEditTextInput.getText().toString();
                if (input.length() == 0) {
                    Toast.makeText(getActivity(), "Fill it in, loser", Toast.LENGTH_SHORT).show();
                    return;
                }

                long millisInput = Long.parseLong(input) * 60000;
                if (millisInput == 0) {
                    Toast.makeText(getActivity(), "Please enter a positive number", Toast.LENGTH_SHORT).show();
                    return;
                }

private void startTimer() {
        mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 100) {
            @Override
            public void onTick(long millisUntilFinished) {
                mTimeLeftInMillis = millisUntilFinished;
                updateCountDownText();
            }

private void updateCountDownText() {
        int minutes = (int) (mTimeLeftInMillis / 1000)/60;
        int seconds = (int) (mTimeLeftInMillis / 1000)% 60;

        String timeLeftFormatted = String.format(Locale.getDefault(),

        timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));
        mTextViewCountdown.setText(timeLeftFormatted);

一般来说,EditText不能接受多个输入,因此我们需要一种变通方法。 选项1:选择约束用户以mm:ss格式输入,并按如下方式解析:

 String input[] = mEditTextInput.getText().toString().split(":");
//input[0] is minutes and input[1] is seconds
 String input1 = mEditTextInput.getText().toString();
 String input2 = mEditTextInput2.getText().toString();
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
选项2:使用两个编辑文本,一个挨着另一个,它们之间有一个文本视图,其中包含字符串“:”,并获得如下输入:

 String input[] = mEditTextInput.getText().toString().split(":");
//input[0] is minutes and input[1] is seconds
 String input1 = mEditTextInput.getText().toString();
 String input2 = mEditTextInput2.getText().toString();
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
选项3:使用一个简单的文本视图,并检测用户的按键来填充值。您还需要使用变量来检测到目前为止的有效按下次数(在输入数字时递增,在按下x键时递减)。比如说,Textview中的初始值为00:00,当检测到按键“1”时,您可以使用以下代码来显示它:

String str=getKey();
String str2=mTextView.getText().toString();
if(numKey==0)//numkey is the number of valid presses
{
    String toSet="0"+str+":00";
    mTextView.setText(toSet);
}
else if(numKey==1)
{
    String toSet=str+str2.substring(1);
    mTextView.setText(toSet);
}
//and so on...
getKey()函数可以按如下方式实现:

 String input[] = mEditTextInput.getText().toString().split(":");
//input[0] is minutes and input[1] is seconds
 String input1 = mEditTextInput.getText().toString();
 String input2 = mEditTextInput2.getText().toString();
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
事实上,您可以删除该行

String str=getKey();
代替操作,您只需调用函数(比如formatTextView)并将键作为参数传递给它,它将负责设置textView。最后,使用mTextView.getText().toString()按需获取您的值

注意:如果片段有任何其他Edittext,则选项3将不起作用,因为这将消耗onKeyPressed事件


希望这对您有所帮助:)

一般来说,EditText不能接受多个输入,因此我们需要一种解决方法。 选项1:选择约束用户以mm:ss格式输入,并按如下方式解析:

 String input[] = mEditTextInput.getText().toString().split(":");
//input[0] is minutes and input[1] is seconds
 String input1 = mEditTextInput.getText().toString();
 String input2 = mEditTextInput2.getText().toString();
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
选项2:使用两个编辑文本,一个挨着另一个,它们之间有一个文本视图,其中包含字符串“:”,并获得如下输入:

 String input[] = mEditTextInput.getText().toString().split(":");
//input[0] is minutes and input[1] is seconds
 String input1 = mEditTextInput.getText().toString();
 String input2 = mEditTextInput2.getText().toString();
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
选项3:使用一个简单的文本视图,并检测用户的按键来填充值。您还需要使用变量来检测到目前为止的有效按下次数(在输入数字时递增,在按下x键时递减)。比如说,Textview中的初始值为00:00,当检测到按键“1”时,您可以使用以下代码来显示它:

String str=getKey();
String str2=mTextView.getText().toString();
if(numKey==0)//numkey is the number of valid presses
{
    String toSet="0"+str+":00";
    mTextView.setText(toSet);
}
else if(numKey==1)
{
    String toSet=str+str2.substring(1);
    mTextView.setText(toSet);
}
//and so on...
getKey()函数可以按如下方式实现:

 String input[] = mEditTextInput.getText().toString().split(":");
//input[0] is minutes and input[1] is seconds
 String input1 = mEditTextInput.getText().toString();
 String input2 = mEditTextInput2.getText().toString();
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
事实上,您可以删除该行

String str=getKey();
代替操作,您只需调用函数(比如formatTextView)并将键作为参数传递给它,它将负责设置textView。最后,使用mTextView.getText().toString()按需获取您的值

注意:如果片段有任何其他Edittext,则选项3将不起作用,因为这将消耗onKeyPressed事件


希望这对您有所帮助:)

在将标签说明添加到问题之前,请仔细阅读标签说明。添加的其中一个标记包含一条不使用该标记的明确消息。在将标记说明添加到问题之前,请仔细阅读标记说明。添加的其中一个标记包含一条明确的消息:不要使用它。我使用选项2让它工作!谢谢你的帮助:)我用选项2实现了!谢谢你的帮助:)