在Android中按下按钮时连续触发事件

Rah*_*hul 7 android

我有ButtonTextView.最初单击按钮i增加计数值并显示在TextView中.我以前用过的代码是.

buttonDayPlus.setOnClickListener(new OnClickListener() 
{               
     @Override
     public void onClick(View v) 
     {
     count = count + 1;
         textView.setText(Integer.toString(count));
     }
}
Run Code Online (Sandbox Code Playgroud)

但现在我想要的是如果用户按下按钮,然后我想一个接一个递增值并显示增量值,textView并且一旦用户向上移动他的手......最终的增量值显示在textView.所以,如果有人知道帮我解决这个问题

Sus*_*eel 7

您将需要使用Handler对象,因为您必须实现一个单独的线程来递增/递减

public class MainActivity extends Activity {

    private boolean autoIncrement = false;
    private boolean autoDecrement = false;
    private final long REPEAT_DELAY = 50;
    private Handler repeatUpdateHandler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.input);

        class RepetitiveUpdater implements Runnable {

            @Override
            public void run() {
                if (autoIncrement) {
                    increment();
                    repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
                } else if (autoDecrement) {
                    decrement();
                    repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY);
                }
            }

        }

        up.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                increment();
            }
        });

        up.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                autoIncrement = true;
                repeatUpdateHandler.post(new RepetitiveUpdater());
                return false;
            }
        });

        up.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP && autoIncrement) {
                    autoIncrement = false;
                }
                return false;
            }
        });

    }

    public void increment() {
        if (i < 100) {
            i++;
            TextView no = (TextView) findViewById(R.id.no);
            no.setText(String.valueOf(i));
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

减量也是如此.

礼貌:Github,作者:Jeffrey F. Cole


Emi*_*nin 2

您应该使用OnTouchListener而不是 OnClickListener。

然而,你的问题是模棱两可的。如果您只想在释放按钮时增加该值一次,您可以这样做:

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            count++;
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

如果您想在用户按住按钮时增加计数,您可以这样做:

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        count++;
        myTextView.setText("Click count: "+count);
    }
};
Run Code Online (Sandbox Code Playgroud)

其中 myTextView 当然是您想要显示点击的文本视图。