2012-10-03 28 views
6

Tôi có một số tiện ích trong chế độ xem, mỗi tiện ích cần có Mã hành động riêng. Tôi thấy rằng ActionMode không tự động loại bỏ khi người dùng chạm vào bên ngoài thanh hành động. Do đó, người dùng có thể dễ dàng bắt đầu một ActionMode cho một điều khiển, sau đó nhấn (longclick trong trường hợp của tôi) một điều khiển khác và xếp một ActionBar thứ hai lên trên đầu tiên. Điều này gây ra lỗi lập trình logic.cách phát hiện nếu actionmode đã có mặt

Tôi có thể theo dõi ActionMode hiện tại bằng biến thành viên cấp hoạt động và loại bỏ biến hiện tại nếu cần một biến mới. Howewver, điều này làm cho mã của tôi lộn xộn để đọc và duy trì. Và hơn nữa, tôi muốn loại bỏ nó ngay lập tức khi người dùng chạm vào bất cứ điều gì bên ngoài thanh hành động.

Bất kỳ đề xuất nào về cách tốt để xử lý việc này?

Trả lời

6

Tôi đã tìm một giải pháp của vấn đề này một thời gian trước và như tôi biết bạn không thể theo dõi nó mà không lưu trạng thái chế độ hành động hiện tại trong một biến toàn cầu. Tuy nhiên tôi không nghĩ rằng một biến với tên thích hợp sẽ làm cho mã của bạn lộn xộn.

+0

Ok, nhưng lộn xộn sang một bên, giả sử người dùng nhấp vào EditText mà bạn chưa phân loại. Làm thế nào để bạn loại bỏ thanh hành động không phù hợp? –

+0

Ok, nếu tôi hiểu bạn đúng ... Tôi đã thực hiện nó như thế: biến toàn cục được thực hiện 'ActionMode mMode;', điền nó với chế độ hành động hiện tại trong phương thức 'onCreateActionMode (...)', và sau đó chỉ cần gọi 'mMode .finish() 'khi tôi cần thoát khỏi chế độ hành động hiện tại – user1049280

+0

Phải, tôi hiểu điều đó. Nhưng làm thế nào để bạn biết khi nào nên gọi kết thúc()? Nghĩa là, có nhiều nơi người dùng có thể nhấp; bạn có phân lớp mọi đối tượng và kiểm tra MotionEvent.ACTION_DOWN và sau đó gọi kết thúc()? Điều đó sẽ rất dễ xảy ra lỗi, các bit mã này sẽ được rải khắp nơi. –

Các vấn đề liên quan