【问题标题】:how to get value after the last multiclique in android如何在android中的最后一个multiclique之后获得价值
【发布时间】:2018-03-29 03:01:39
【问题描述】:

我正在创建一个应用程序,但我无法执行以下操作: 我有一个增加变量的按钮和一个减少并通过php将值保存在数据库中并显示在文本视图中的按钮。我想要做的是,当增量(或减量)按钮收到多次点击时,它只会保存最后一个增量值。 示例:

    btn_UP.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View v) {
                if (temperature <32)
                    temperature ++;
                    txtTemp.setText ("" + temperature);
                }
            }

        });

btn_DOWN.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View v) {
                if (temperature> 17)
                    temperature--;
                    txtTemp.setText ("" + temperature);
                }
            }
        });

我这样做的方式是,它会随着按钮中的每次点击而增加和减少,但是当接收到多次点击时,它也会做同样的事情,但是我希望它继续增加,并且只有当多集团完成时该值已显示并保存在数据库中。

我尝试执行以下操作,但没有按预期工作:

链接:Android Preventing Double Click On A Button

public class Activity ... {
 
    private long mLastClickTime = 0;

 
    protected void OnCreate ... {

    btn_tempUP.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick (View v) {
                if (SystemClock.elapsedRealtime () - mLastClickTime <500) {
                    
        return;
                }
                mLastClickTime = SystemClock.elapsedRealtime ();

                if (temperature <32)
                    temperature ++;
                    txtTemp.setText ("" + temperature);
                }
            }

        });


    }

}

有人可以帮我解决这个问题吗?如果我能说清楚的话。

【问题讨论】:

  • 这些答案有帮助吗?

标签: android android-studio button


【解决方案1】:

我可以提供一个理论上的答案:

1) 有一个单独的类,最好是 AsyncTask,或用于将温度上传到 PHP 的服务。

(无论如何,您将需要异步,因为您正在做网络)。

2) 让这个新任务像这样工作:

开始 --> 延迟 --> 上传

3) 当用户按下递增或递减时,它会取消当前任务并创建一个新任务......因此除非他们停止按下 [DELAY] 时间,否则它永远不会上传。

您甚至可以为上传任务设置一个完成处理程序,该处理程序回调并指示上传已成功...例如,通过将文本设置为粗体...但在按下 +/- 时不设置为粗体。

【讨论】:

    【解决方案2】:

    您无法知道用户何时停止点击,但您可以知道他何时开始点击。所以,我有一个想法,不确定这是最好的解决方案,但希望有所帮助。当用户开始点击button时,至少等待1s(可能更小,也可以更大),如果他点击了多次,我们在他停止点击1s后继续等待,是时候显示temperature的最后一个值了.请看下面的代码,希望你明白了。

    private Handler handler = new Handler(Looper.getMainLooper());
        private int temperature = 0;
        private TextView textView;
        public Runnable runnable = new Runnable() {
            @Override
            public void run() {
                if (textView != null) {
                    textView.setText(String.valueOf(temperature));
                }
            }
        };
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = findViewById(R.id.text);
            findViewById(R.id.btn_add).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    handler.removeCallbacksAndMessages(runnable);
                    handler.postDelayed(runnable, 1000);
                    if (temperature < 32) {
                        temperature++;
                    }
                }
            });
            findViewById(R.id.btn_minus).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    handler.removeCallbacksAndMessages(runnable);
                    handler.postDelayed(runnable, 1000);
                    if (temperature > 17) {
                        temperature--;
                    }
                }
            });
        }
    
        @Override
        protected void onStop() {
            handler.removeCallbacksAndMessages(runnable);
            super.onStop();
        }
    

    【讨论】:

    • 我尝试过这种方式,但效果不佳,因为用户还需要同时进行多次点击,并且只有在停止点击时才发送信号。这种方式你建议我尝试这样做,但它只能每秒点击一次按钮,这给人一种应用程序正在锁定的印象。在实践中,它不是很好,感谢您的回答
    • 它只是锁定更新的文本,但您仍然可以将足够的值计为点击时间。温度值始终是最新的。
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多