【问题标题】:using onLongClickListener to change values quickly使用 onLongClickListener 快速更改值
【发布时间】:2014-12-22 23:39:22
【问题描述】:

我正在尝试创建一组按钮,只需单击一下即可将值向上或向下更改 1,并通过按住按钮快速更改值。我不知道如何让价值快速改变。这是我所拥有的:

    btPlus.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mTempo=mTempo+1;
        setTempo(mTempo + 1);
        tvTempo.setText(Integer.toString(mTempo));
      }  
    });
    btPlus.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public void onLongClick(View view) {
            mTempo = mTempo + 1;
            setTempo(mTempo + 1);
            tvTempo.setText(Integer.toString(mTempo));
        }
    });                              
    btMinus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mTempo=mTempo-1;
            setTempo(mTempo - 1);
            tvTempo.setText(Integer.toString(mTempo));
        }
    });
    btMinus.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public void onLongClick(View view) {
            mTempo = mTempo - 1;
            setTempo(mTempo - 1);
            tvTempo.setText(Integer.toString(mTempo));
        }
    });    
    return rootView;
}

感谢您的帮助。

【问题讨论】:

    标签: java android button listener wear-os


    【解决方案1】:

    按住按钮不是长按它。你需要一个 onTouchListener

    在 onPressed 方法中检查 MotionEvent 是 UP 还是 DOWN,然后开始/停止计数。

    编辑:尝试在线程中计数,类似这样:

    Final Thread t = new Thread(new Runnable(){
           @Override public void run(){
              while(!t.isInterrupted(){
                 setTempo(mTempo++);
              }
           }
    switch (event){
    case ACTION_DOWN: 
           t.start();
           break;
    case ACTION_UP:
           t.interrupt();
           break
    }
    

    【讨论】:

    • 我可以理解使用 onTouchListener,但我仍然在努力如何让它在按下按钮时连续计数。还有其他想法吗?
    • 您可以在 DOWN 时启动一个新线程并启动它。在 UP 你中断它。 The Thread counts in while not interrupted loop your mTempo
    • 介意再帮点忙吗?它说 t 是从内部类访问的,需要在第一种情况下声明为 final ,然后在第二种情况下 t 可能没有被初始化。
    • 是的,没错,答案做了一些改变。 t 不是 final 并在开始时初始化。您可以将 Thread 声明放在 onPressed 方法之外。
    猜你喜欢
    • 2019-10-08
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多