2011-01-17 27 views
5

Tôi có ListActivity với các mục tùy chỉnh, trong đó mọi mục đều có TextEdit riêng của nó. Chạm vào bất kỳ thiết bị nào trong số đó mang bàn phím IME lên và nó khiến cho ListView được thay đổi kích cỡ. Vì vậy, EditText, gần đây đã nhận được tiêu điểm bằng cách nhấn vào nó. Nhấn lần thứ hai là bắt buộc để tập trung hoặc chắc chắn. Chỉ xảy ra khi tôi di chuyển hơn 1 mục trong danh sách.Android: ListView với EditTexts làm rối loạn tiêu điểm và IME

Có cách nào để mở IME và tiếp tục tập trung vào EditText chỉ bằng một lần nhấn không?

+2

Như tôi cho rằng nguyên tắc UI của Android nói chung không khuyên bạn sử dụng các điều khiển hoạt động, có thể lấy tiêu điểm và đầu vào trong mọi mục danh sách. Vì vậy, tôi đang cố gắng để lừa nó. Cho đến nay tập trung rõ ràng tập trung với requestFocus trên EditText cụ thể không giúp như adapter remaps mỗi mục sau khi ListView.onSizeChanged, vì vậy tôi xem xét adapter remap là nguồn tập trung bị mất. –

Trả lời

0

Bạn có muốn thay đổi kích thước danh sách không? Bạn có thể ghi đè lên ListView.onSizeChanged và tiêu thụ nó thay vì "bubbeling" nó để super.onSizeChanged (giả sử giả định của bạn về nguồn lỗi là chính xác)?

+0

Tôi đã ghi đè lên - nó không giúp đỡ, như remapping trong adapter xảy ra sau khi thay đổi kích cỡ được thực hiện, rõ ràng là không phải vì ListView invalidates. Bây giờ tôi đang làm việc để tạo danh sách TextViews với khả năng chỉnh sửa mục bằng cách chạm vào màn hình mới ... –

+0

Bạn có thể hiển thị Hộp thoại có TextEdit trong khi ghi vào mục danh sách. Các hộp thoại có xu hướng thuộc về cùng một Hoạt động mà chúng được bắt đầu và chúng tự đặt vị trí ngay phía trên Hoạt động gốc mà không ẩn hoàn toàn nó. Bằng cách này bạn cũng nhận được một dấu hiệu trực quan của thực tế là bạn đã không rời khỏi hoạt động thực tế. Có thể liên kết này có thể trợ giúp: http://groups.google.com/group/android-beginners/browse_thread/thread/efdfb8c7e24fee93?pli=1 – dbm

+0

Tôi vừa nhận ra rằng có hộp thoại hoặc hoạt động chuyên dụng khác để chỉnh sửa mục danh sách mục có lẽ là cách chính thức của cách tiếp cận Android GUI. –

0

Tôi đã giải quyết vấn đề này bằng cách lưu trữ EditText được khai thác trong một biến và yêu cầu tập trung vào nó sau một sự chậm trễ. Đó là một hack, nhưng đôi khi Android yêu cầu hack.

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
     EditText editText = getListAdapter().tappedEditText; 
     if (editText != null) { 
      editText.requestFocus(); 
     } 
    } 
}, 100);