2017-05-18 15 views
6

Tôi đang làm việc trên một ứng dụng Android TV và tôi đang đối mặt với một vấn đề lạ liên quan đến người nghe nhấp vào mục: mọi thứ hoạt động tốt nhưng đôi khi nhấp chuột không được truyền, rất có khả năng người nghe không được đặt.Android TV: RowsFragment item click không hoạt động trong vài trường hợp

Tôi đã phân lớp RowsFragment và tôi hiển thị hình ảnh của mình với các hàng gồm 6 phần tử: có nghĩa là mỗi hàng của lưới thực sự là một hàng trong bộ điều hợp, ngay cả khi các bức ảnh có cùng tháng. Vui lòng xem hình ảnh để hiểu rõ hơn.

enter image description here

Bây giờ vấn đề này: khi tôi khởi động ứng dụng và tôi di chuyển xuống, dòng đầu tiên mà không phải là có thể nhìn thấy trong hình trên (vì vậy hàng thứ tư, vì đây 3 hàng được trả lại), doesn' t nhận được "nhấp chuột" của tôi, không có gì xảy ra. Điều này cũng có thể đúng đối với các hàng thứ 5, 6, ... nhưng sau đó (tôi không nhận ra một mẫu) hàng có thể nhấp lại (tức là 8, 9, ..) 3 hàng đầu tiên luôn có thể nhấp được tốt.

Nếu tôi cuộn lên lần nữa và những hàng không thể nhấp lại xuất hiện trên màn hình một lần nữa, giờ đây chúng có thể nhấp được.

Trong onCreate của đoạn, tôi gọi:
setOnItemViewClickedListener(new ItemViewClickedListener());
và theo tài liệu này nên ghi đè người nghe được thiết lập bởi các quan điểm mục duy nhất. Nó cũng được đề nghị để thiết lập một người nghe, không phải cả hai: trong thực tế, tôi chỉ cần thiết lập này cho một mảnh.

Trong lớp Presenter của một mục hàng, tôi đã cố gắng thêm người nghe nhấp chuột vào onCreateViewHolder cho chế độ xem và tôi đã phát hiện ra khi sự cố xảy ra, người nghe này được gọi.

Vì vậy, có vẻ như trong một số trường hợp, trình lắng nghe mảnh tổng thể không ghi đè trình nghe xem hoặc không được đặt ở tất cả.

Điều gì cũng khiến tôi lo lắng về vấn đề này, là tôi không thể tái tạo nó trong chế độ gỡ lỗi khi tôi đặt điểm ngắt và dừng hoạt ảnh cuộn.

Tôi đang sử dụng phiên bản mới nhất Leanback:

compile 'com.android.support:leanback-v17:25.3.1' 

Vấn đề là tái sản xuất trên NVIDIA SHIELD TV (Android 7.0), không chắc chắn về các thiết bị khác.

Cập nhật: điều thú vị là khi một mục không thể nhấp vào trong một hàng, tôi mong tất cả các mục trong cùng một hàng sẽ không thể nhấp được. Thay vào đó không phải là trường hợp, một số có thể nhấp, một số thì không.

Cập nhật 2: có vẻ như ListRowPresenterItemBridgeAdapter phương pháp onBind, trong một số trường hợp, tìm getOnItemViewClickedListener để trở về null, vì vậy người nghe mục nhấp chuột không được thiết lập. Đó là lạ bởi vì người nghe được đặt cho lớp chính RowsFragment và nó hoạt động tốt cho hầu hết các mục, cũng các mục trong cùng hàng của những người không hoạt động.

Như một giải pháp thay thế, tôi đã tìm thấy giải pháp này: phân lớp ListRowPresenter và đặt trình nghe nhấp chuột giả cho nó.

private class GroupedListRowPresenter extends ListRowPresenter { 
    GroupedListRowPresenter(int focusZoomFactor) { 
     super(focusZoomFactor); 
    } 

    @Override 
    protected void onBindRowViewHolder(RowPresenter.ViewHolder holder, Object item) { 
     super.onBindRowViewHolder(holder, item); 

     holder.setOnItemViewClickedListener(new BaseOnItemViewClickedListener() { 
      @Override 
      public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder 
        rowViewHolder, Object row) { 
       Timber.d("item click from dummy listener: this should never happen!"); 
      } 
     }); 
    } 
} 

Tôi không cảm thấy thoải mái vì tôi thực sự không thích đặt người nghe nhấp chuột trống, ngay cả khi tôi biết nó sẽ bị ghi đè.

Cập nhật 3: sự cố cũng có thể tái sản xuất với ứng dụng mẫu được tạo bởi Android Studio, vì vậy dường như không liên quan đến điều gì đó sai trong mã của tôi. Vì lý do này, tôi đã gửi một lỗi: https://issuetracker.google.com/issues/62443122

Nếu bạn cũng bị ảnh hưởng bởi sự cố này, vui lòng đánh dấu vấn đề ở trên, vì vậy bạn sẽ nhận được nhiều sự chú ý hơn.

+0

Cảm ơn bạn đã đăng sự tiến bộ của mình tại đây. Đã có chính xác cùng một vấn đề và cập nhật thứ 2 của bạn cũng đã sửa nó cho tôi. Nó cảm thấy thực sự sai mặc dù, tôi hy vọng nó sẽ không phá vỡ trong phiên bản tương lai. Có lẽ sẽ cần phải viết một bài kiểm tra giao diện người dùng cho điều này>. <. – Hless

+0

@Tôi không có thời gian cho đến nay, nhưng tôi nghĩ rằng tôi đã nhìn thấy cùng một vấn đề trong dự án mẫu cho Android TV được tạo bởi Android Studio. Tôi sẽ kiểm tra lại về điều đó: nếu đó là trường hợp nó sẽ được nhanh chóng và dễ dàng để mở một vấn đề. Nếu không, vì dự án của tôi không mở, tôi cần phải tìm thời gian để thực hiện một dự án mẫu trên github. – fasteque

+0

Tôi cũng đã thấy điều này. Quay lại 'com.android.support: leanback-v17: 24.2.1' đã khắc phục sự cố cho tôi –

Trả lời

4

Tôi đã gặp sự cố tương tự nhưng việc cập nhật để hỗ trợ phiên bản thư viện 25.4.0 đã khắc phục sự cố này. Xin lưu ý rằng từ 25.4.0 bạn phải bao gồm

maven { 
    url "https://maven.google.com" 
} 

trong kho. Xem Support Library Setup.

+0

Có, tôi đã nhận thấy nhận xét sau trong ghi chú phát hành: 'BrowseFragment onItemClicked callbacks bị hỏng trong 25.3.0'. Vì bạn đã thử nghiệm nó, tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn. – fasteque

+0

Tôi cũng có thể khẳng định rằng nguyên nhân của vấn đề này là thư viện hỗ trợ leanback 25.3.x. Hạ cấp/nâng cấp sẽ khắc phục sự cố. – dell116

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