2015-12-14 16 views
5

私の火のテレビのアプリで私はrecyclerviewhorizontal layoutを使用しています。RecyclerViewの項目は、フォーカスを失う

dpadとスクロールしている作品や、項目も注目されています。

しかし、私はボタンを押したときに非常に速くスクロールします。多くのキーダウンイベントが発生し、アイテムがフォーカスを失っているため、スクロールすることができません。これは、私のrecyclerview上の別のTextviewがフォーカスを得ているためです。

これはバグのようです。このための回避策はありますか?

+0

が同じ問題に直面する人のためにあるの代わりAdapterPresenterを使用することです。私はそれのための回避策を見つけた。私はもうRecyclerViewを使用していません。私はこのHorizo​​ntalListView lib:https://github.com/sephiroth74/Horizo​​ntalVariableListViewに切り替えました。これは私のニーズに十分です。 – sNore

答えて

2

私は同じ問題に直面し、私は私のプロジェクトでやっていることは(RecyclerViewを含む)私の活動に下記好き:あなたはDPAD上のボタン、およびフォーカスを保持したときに高速スクロールを回避

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; 
    } 

私のRecyclerViewで正常に動作します。

+0

thx、私は次のプロジェクトでそれを試してみよう! – sNore

0

これはバグです。

https://stackoverflow.com/a/33190656/332798https://issuetracker.google.com/issues/37067220を参照してください


私は、フォーカスを失うので、デタッチビューがRecyclerView外にフォーカスを移動しませんでした私のアイテムビューのclearFocus()を去勢することにより、このバグを回避することができました:

override fun clearFocus() { 
    if (parent != null) 
     super.clearFocus() 
} 
0

私は同じ問題に直面しています。良いニュースは、人気のあるアプリ(YouTubeなど)にこの問題がないということでした。 私は参考情報resourceを見つけました。調査の後、私は私にとって便利な解決策を作りました。 キーは、最も単純な例

//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(); 
} 
関連する問題