2010-10-30 21 views
9

Tôi đã có một vài ngày cố gắng giải quyết vấn đề này nhưng tôi không thể tìm ra. Vấn đề là, hoạt động đơn giản, với cách bố trí đơn giản, ScrollView -> LinearLayout -> và rất nhiều nút bên trong bố trí (trong nội dung cuộn). Tất cả mọi thứ hoạt động tốt, nhưng một điều khó khăn. Khi tôi nhấp vào một nút, hãy nói ở đầu nội dung cuộn và ngay lập tức cuộn xuống cuối nội dung và nhấp vào nút khác ở đó, không có gì xảy ra cho đến khi tôi nhấp lần thứ hai và tất cả trở lại bình thường. Điều này có thể được sao chép bất cứ lúc nào và mã độc lập (tôi đã thử hơn 20 kịch bản). Tôi chưa có nhiều kinh nghiệm trong Android, nhưng có vẻ như người nghe cuộn dừng trình nghe onClick hoặc một cái gì đó tương tự. Đánh giá rất cao mọi sự giúp đỡ trong trường hợp này. Cảm ơn bạn trước.ScrollView với các nút bên trong, không có phản ứng cho đến khi nhấp chuột thứ hai vào bất kỳ nút nào bên trong

PD. Nếu tôi lập trình thực hiện scrollTo(), thay vì cuộn bằng tay bằng ngón tay, mọi thứ chỉ hoạt động tốt và nhấp chuột phản hồi khi chạm lần đầu. Nó đơn giản là áp đảo tôi.

+0

@esenian: Tạo dự án mẫu thể hiện sự cố. Tải lên dự án đó ở đâu đó (ví dụ: dưới dạng tệp ZIP). Đăng liên kết tới đây ở đây, trong một nhận xét có tiền tố là @CommonsWare để tôi biết bạn đã đăng nó lên. – CommonsWare

+0

@CommonsWare Tôi đã tải lên một dự án ở đây http://www.megaupload.com/?d=U69RRBAW Thực sự đơn giản, bố cục, không có hành động nào, chỉ cần nhấn Nút 1, cuộn xuống và nhấn nút 14. Bạn sẽ thấy ý tôi (không có khung màu cam trên nút cho đến lần nhấp thứ hai). Cảm ơn vi đa danh thơi gian cho tôi. – esenian

+0

@esenian: MegaUpload cho biết tệp không khả dụng. Có lẽ đăng nguồn Java của lớp Hoạt động của bạn và tệp XML bố cục (nếu có) sẽ đủ, bằng cách chỉnh sửa câu hỏi của bạn hoặc có thể bằng cách sử dụng http://gist.github.com hoặc các dịch vụ "pastebin" tương tự. – CommonsWare

Trả lời

2

Mọi thứ đều hoạt động bình thường.

Khi bạn bắt đầu cuộn, ScrollView sẽ xác nhận các sự kiện chạm cho đến khi bạn ngừng chạm vào màn hình một chút. Trong Android 2.2, bạn sẽ biết khi cuộn được coi là hoàn thành, bởi vì thanh cuộn bên phải sẽ biến mất.

+0

Ok, tôi hiểu ý của bạn là gì. Vì vậy, tôi giả sử không có tùy chọn để giảm thời gian trong khi scrollview là claming cảm ứng sự kiện một khi nó dừng di chuyển (tại leat trực quan) ...? Tôi biết nó không có nhiều thời gian, có thể là 0,5 giây nhưng sill anoying. Nếu có một cách nó sẽ là tuyệt vời. Dù sao cảm ơn bạn rất nhiều cho câu trả lời của bạn. – esenian

+0

@esenian: "Vì vậy, tôi giả sử không có tùy chọn để giảm thời gian trong khi scrollview là claming cảm ứng sự kiện một khi nó dừng di chuyển (tại leat trực quan) ...?" -- Không phải là tôi biết. Hãy nhớ rằng một 'ScrollView' của một danh sách' Buttons' không phải là một kỹ thuật mà bạn sẽ thấy nhiều ứng dụng sản xuất sử dụng. – CommonsWare

+0

Chắc chắn bạn nói đúng và một lần nữa cảm ơn bạn, tôi nghĩ đây là cách tiếp cận cho ứng dụng YouTube mới từ google. Nó dường như có một horizontalscrollview dân cư với các nút mô phỏng "các tab di chuyển". Tôi đã làm cho nó hoạt động và trông khá giống nhau nhưng vấn đề với độ trễ nhấp chuột gây phiền nhiễu. Bây giờ tôi thấy rằng bản thân ứng dụng cũng có cùng một hành vi tụt hậu với điều này để cách tiếp cận của tôi phải khá gần gũi. Đó là tốt đẹp trong quan điểm của tôi. Tôi sẽ cố gắng xem mã scrollview để xem liệu tôi có thể ghi đè lên những gì kiểm soát thời gian này không. Thực sự cảm ơn người đàn ông. – esenian

3

Tôi có cùng một vấn đề. Tôi không đồng ý rằng đó là vấn đề về thanh cuộn mờ dần. Nếu bạn vô hiệu hóa mờ dần, điều tương tự cũng xảy ra.

thử nhiều cách tiếp cận trong themes.xml:

<item name="android:scrollbarDefaultDelayBeforeFade">100</item> 
<item name="android:scrollbarFadeDuration">100</item> 
<item name="android:fadeScrollbars">true</item> 

Nhưng không có gì giúp đỡ. Có vẻ như đó là một điều hệ thống với scrollViews. Điều này có thể giúp bạn xem điều gì đang xảy ra:

setOnScrollListener(new OnScrollListener(){ 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     // TODO Auto-generated method stub 
    } 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     // TODO Auto-generated method stub 
     if(scrollState == 0) Log.i("a", "scrolling stopped..."); 
    } 
    }); 
} 

Nhưng điều đó (không may) không giúp khắc phục vấn đề - mà là giải thích nó.

LƯU Ý: điều này chỉ xảy ra nếu bạn sử dụng ScrollView. ListView không có vấn đề này.

Có ai có ý tưởng khác không?

+0

Có thể bạn đã tìm thấy giải pháp cho điều này? Dường như nó liên quan đến khả năng tăng tốc cuộn (hành động vuốt mạnh hơn sẽ dẫn đến chậm trễ lâu hơn ngay cả khi di chuyển dừng ngay ở đầu/cuối), nhưng tôi không biết cách giải quyết nó. – sniurkst

0

Tôi đã có thể khắc phục điều này bằng cách ghi đè lênScrollChanged, sau đó gửi ScrollView một MotionEvent qua OnTouchEvent khi các giới hạn đạt được để mô phỏng một liên lạc của người dùng.

Đó là chương trình khó khăn nhất, bẩn nhất mà tôi có thể tưởng tượng, nhưng nó hoạt động tốt trong ứng dụng của tôi. Ứng dụng này dành cho điện thoại chỉ chạy 2,2 và lỗi này cần được khắc phục bằng cách nào đó.

Nếu có ai có giải pháp tốt hơn, vui lòng cho tôi biết.

Chỉnh sửa: Vấn đề này chỉ ở mức 2,2 btw, chúng đã sửa lỗi trong 2,3 và không phải là vấn đề trong phiên bản 2.1.

1

Tôi gặp phải tình huống như thế này. Tôi có một ExpandableListView, nó chỉ hoạt động bình thường. Khi tôi xoay điện thoại di động sang ngang và xoay lại, thì một số mục trong một nhóm của ExpandableListView sẽ không phản hồi cho sự kiện nhấp chuột. Trừ khi tôi cuộn chế độ xem danh sách hoặc nhấp vào mục nhóm của các mục này, sự kiện sẽ gửi đến các mục tôi đã nhấp trước đây và thực hiện chính xác mã người nghe nhấp chuột.

Điều này xảy ra cả trong Android 2.3 và 4.0 ...

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