2015-12-14 15 views
5

मेरी आग टीवी ऐप में मैं recyclerviewhorizontal layout के साथ उपयोग कर रहा हूं।पुनर्चक्रण देखें आइटम फोकस

डीपीएड कार्यों के साथ स्क्रॉलिंग और आइटम भी फोकस प्राप्त कर रहे हैं।

लेकिन जब मैं बटन दबाता हूं तो यह बहुत तेजी से स्क्रॉल करता है क्योंकि कई कीडाउन घटनाएं ट्रिगर होती हैं, और आइटम अपना ध्यान खो रहे हैं और अब स्क्रॉल करना संभव नहीं है क्योंकि मेरे रीसाइक्लिंग व्यू के ऊपर Textview फोकस प्राप्त कर रहा है।

यह एक बग की तरह दिखता है। क्या इसके समाधान की कोई युक्ति है?

+0

है Adapter के बजाय Presenter उपयोग करने के लिए है। मुझे इसके लिए एक कामकाज मिला। मैं अब RecyclerView का उपयोग नहीं कर रहा हूँ। मैंने इस क्षैतिज सूची दृश्य में स्विच किया है: https://github.com/sephiroth74/HorizontalVariableListView, जो मेरी आवश्यकताओं के लिए पर्याप्त है। – 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

ऐसा लगता है कि यह एक बग है।

https://stackoverflow.com/a/33190656/332798 और https://issuetracker.google.com/issues/37067220 देखें


मैं, ध्यान खोने तो अलग विचारों RecyclerView बाहर फ़ोकस नहीं था अपने मद विचारों पर clearFocus() neutering द्वारा इस बग के आसपास काम करने में सक्षम था:

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

मुझे एक ही समस्या का सामना करना पड़ा है। अच्छी खबर यह थी कि लोकप्रिय ऐप्स (यूट्यूब और अन्य) को यह समस्या नहीं है। मुझे सूचनात्मक 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(); 
} 
संबंधित मुद्दे