2015-12-14 151 views
5

在我的消防電視應用程序中,我使用recyclerviewhorizontal layoutRecyclerView物品失去焦點

使用dpad工作和項目滾動越來越關注。

但是當我按住按鈕時,它會非常快速地滾動,因爲許多keydown事件被觸發,並且項目正在失去焦點,並且無法再滾動,因爲我的recyclerview上方的另一個Textview正在獲得焦點。

它看起來像一個錯誤。有沒有解決方法?

+0

對於那些誰都會面臨同樣的問題。我找到了一個解決方法。我不再使用RecyclerView。我已經切換到這個Horizo​​ntalListView lib:https://github.com/sephiroth74/Horizo​​ntalVariableListView,這足以滿足我的需求。 – sNore

回答

2

我面臨同樣的問題,我在我的項目做在我的活動(含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; 
    } 

,當你按住DPAD的按鈕,這避免了快速滾動,焦點在我的RecyclerView中正常工作。

+0

thx,我會在下一個項目中嘗試一下! – sNore

0

我遇到了同樣的問題。好消息是,流行的應用程序(YouTube和其他)沒有這個問題。 我發現了信息resource。經過調查,我提出了一個方便我的解決方案。 的關鍵是使用Presenter代替Adapter 有最簡單的例子

//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(); 
}