Giả sử bạn có số TextView
hiển thị số như 0 và bạn có số Button
. Bây giờ nếu người dùng nhấn nút Số trong TextView sẽ tăng cho một (điều này tôi biết làm thế nào để làm) nhưng nếu người dùng nhấn nút và không phát hành nó thì số trong TextView
nên được tăng lên nên lặp lại nó tự miễn là người dùng không phát hành Button
. Nói cách khác: Làm thế nào để tăng số lượng hơn và hơn nữa miễn là người dùng giữ nút?Lặp lại thao tác khi nhấn nút dài
Trả lời
Cách tiếp cận chung (không dành riêng cho Android) sẽ là phát hiện riêng sự kiện báo chí và phát hành. Sự kiện báo chí bắt đầu một tác vụ định kỳ (Runnable
hoặc Thread
) thêm vào bộ đếm (chúng ta hãy nói 5 lần một giây, hoặc cứ 200 ms một lần). Sự kiện phát hành dừng nhiệm vụ định kỳ.
- Thiết lập một
View.OnLongClickListener
cho nút của bạn - Đưa hoạt động của bạn một
Runnable
, và khởi tạo (nhưng không bắt đầu nó) khi bạn tải các hoạt động - Có OnLongClickListener làm nhiệm vụ async thường kỳ cập nhật hộp văn bản và kiểm tra thời gian từ lần đầu tiên được nhấp vào
- Tạo
OnTouchListener
tạm dừngRunnable
khi sự kiện chạm được thực hiện.
Tôi biết đó là một dự thảo thô, nhưng đây là một mô hình thực sự hữu ích để có thể tái sử dụng và sửa đổi, vì vậy nó có giá trị chìm móng vuốt của mình vào nó ...
Bạn sẽ cần phải sắp xếp một sự kiện lặp lại không đồng bộ khi bạn nhận được sự kiện mousePressed
và dừng sự kiện đó khi bạn nhận được sự kiện mouseReleased
.
Có nhiều cách để xử lý điều này trong Java. Tôi thích sử dụng các lớp học java.util.concurrent
, khá linh hoạt. Tuy nhiên, có một vài điều cần lưu ý:
Nếu sự kiện không đồng bộ của bạn không xảy ra trên Chủ đề công văn sự kiện, bạn cần đặt văn bản JButton
bằng cách sử dụng SwingUtilities.invokeLater()
.
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Frame
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
final JButton button = new JButton("0");
final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
button.addMouseListener(new MouseAdapter()
{
int counter = 0;
ScheduledFuture<?> future;
@Override
public void mousePressed(MouseEvent e)
{
Runnable runnable = new Runnable()
{
public void run()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
button.setText(String.valueOf(counter++));
}
});
}
};
future = executor.scheduleAtFixedRate(runnable, 0, 200, TimeUnit.MILLISECONDS);
}
@Override
public void mouseReleased(MouseEvent e)
{
if (future != null)
{
future.cancel(true);
}
}
});
frame.add(button);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
- 1. Nhấn và giữ nút UIButton - lặp lại thao tác cho đến khi cho phép
- 2. Force sơn lại sau khi nhấn nút
- 3. Thao tác nhấn tab lựa chọn hình ảnh trong VIM
- 4. hành động lặp lại trên Android khi nhấn và giữ nút
- 5. Chọn nút trong khi nhấn nút enter
- 6. Ember.js - Ràng buộc thao tác nút từ vòng lặp #each đến mô hình riêng của mình
- 7. Đường ray: Ngăn chặn chèn trùng lặp do nhấn nút quay lại và lưu lại
- 8. Loại bỏ DatePickerDialog khi nhấn nút quay lại
- 9. Ngăn chặn ShowDialog() quay lại khi nhấn nút OK
- 10. Arduino uno r3 không đặt lại khi nhấn nút reset
- 11. lưu trạng thái khi nhấn nút quay lại
- 12. Hủy AsyncTask khi người dùng nhấn lại nút
- 13. Thao tác thao tác không kích hoạt
- 14. iPhone: Làm thế nào để kết hợp thao tác kéo dài và thao tác kéo với nhau trên bản đồ?
- 15. Thao tác chuỗi dài 30 triệu ký tự
- 16. NotSerializableException khi nhấn nút home
- 17. Cách phát hiện thao tác nhấn trên nền màu xám (mờ) trong UISearchDisplayController
- 18. Mẫu thao tác chuỗi
- 19. Trình xử lý sự kiện nhấn nút dài
- 20. Thao tác hộp kiểm jstree
- 21. Nested Thao tác trong Mathematica
- 22. Kết nối các thao tác với các nút trong Xcode
- 23. Thao tác bit java
- 24. Làm cách nào để làm cho trang tải lại của Firefox khi nhấn nút quay lại?
- 25. Thao tác trừ trên chuỗi
- 26. Thao tác Boolean
- 27. Thao tác DOM trong khi hiển thị SVG lớn
- 28. gọi chức năng khi nhấn nút - pyqt
- 29. Có nhiều lệnh khi nhấn nút
- 30. Thao tác Byte trong PHP
+1 Điều này nghe giống như quy trình cụ thể của Android mà tôi mô tả tổng quát hơn. –