2015-12-14 25 views
5

Trong ứng dụng truyền hình cháy của tôi, tôi đang sử dụng recyclerview với horizontal layout.Các mục RecyclerView bị mất tiêu điểm

Cuộn bằng công cụ dpad và các mục cũng sẽ được lấy nét.

Nhưng khi tôi giữ nút, nó cuộn rất nhanh vì nhiều sự kiện nhấn phím được kích hoạt và các mục sẽ mất tiêu điểm và không thể cuộn nữa vì một khác Textview phía trên recyclerview của tôi đang lấy tiêu điểm.

Dường như lỗi. Có cách giải quyết nào cho vấn đề này không?

+0

Đối với những người sẽ đối mặt với cùng một vấn đề. Tôi tìm thấy một giải pháp cho nó. Tôi không sử dụng RecyclerView nữa. Tôi đã chuyển sang lib HorizontalListView này: https://github.com/sephiroth74/HorizontalVariableListView, đủ cho nhu cầu của tôi. – sNore

Trả lời

2

tôi phải đối mặt với cùng một vấn đề, những gì tôi làm trong dự án của tôi thích dưới đây trong Hoạt động của tôi (có chứa RecyclerView):

private long mLastKeyDownTime = 0; 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     long current = System. currentTimeMillis(); 
     boolean res = false; 
     if (current - mLastKeyDownTime < 300) { 
      res = true; 
     } else { 
      res = super.onKeyDown(keyCode, event); 
      mLastKeyDownTime = current; 
     } 
     return res; 
    } 

mà tránh sự di chuyển nhanh chóng khi bạn giữ nút trên dpad, và trọng tâm hoạt động tốt trong RecyclerView của tôi.

+0

thx, tôi sẽ thử điều đó trong dự án tiếp theo của mình! – sNore

0

Tôi đã phải đối mặt với cùng một vấn đề. Tin vui là các ứng dụng phổ biến (YouTube và các ứng dụng khác) không có vấn đề này. Tôi tìm thấy thông tin resource. Sau khi điều tra, tôi đã thực hiện một giải pháp thuận tiện cho tôi. Điều quan trọng là sử dụng Presenter thay vì Adapter Có là ví dụ đơn giản nhất

//Presenter class 
public class ItemViewPresenter extends Presenter { 

    @Override 
    public final ViewHolder onCreateViewHolder(ViewGroup parent) { 

     //I use data binding 
     ItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item, parent, false); 
     return new MyViewHolder(binding); 
    } 

    @Override 
    public final void onBindViewHolder(ViewHolder viewHolder, Object item) { 
     String text = (String) item; 
     ((MyViewHolder) viewHolder).bind(text); 
    } 

    @Override 
    public final void onUnbindViewHolder(ViewHolder viewHolder) { 
    } 

    private class MyViewHolder extends Presenter.ViewHolder { 

     private final ItemBinding binding; 

     private DiscoveryViewHolder(ItemBinding binding) { 
      super(binding.getRoot()); 
      this.binding = binding; 
     } 

     private void bind(String text) { 

      binding.textView.setText(text); 
     } 
    } 
} 

//... 
private void setupRecyclerView() { 

    RecyclerView recyclerView = _baseLayout.findViewById(R.id.recyclerView); 

    ArrayObjectAdapter arrayObjectAdapter = new ArrayObjectAdapter(new ItemViewPresenter()); 

    ItemBridgeAdapter bridgeAdapter = new ItemBridgeAdapter(arrayObjectAdapter); 

    recyclerView.setAdapter(bridgeAdapter); 

    LinearLayoutManager layoutManager = new LinearLayoutManager(_baseLayout.getContext(), LinearLayoutManager.HORIZONTAL, false); 
    recyclerView.setLayoutManager(layoutManager); 

    List<Strings> textList = new ArrayList(1); 
    textList.add("1"); 

    //add objects 
    arrayObjectAdapter.addAll(0, textList); 

    //clear objects 
    //arrayObjectAdapter.clear(); 
} 
Các vấn đề liên quan