2015-12-14 16 views
5

W mojej aplikacji fire tv używam recyclerview z horizontal layout.Elementy RecyclerView tracą ostrość

Przewijanie za pomocą dpad działa, a także przedmioty zyskują ostrość.

Ale kiedy trzymam przycisk, przewija się bardzo szybko, ponieważ uruchamia się wiele zdarzeń kluczowych, a przedmioty tracą ostrość i nie można już przewijać, ponieważ inny widok Textview powyżej mojego widoku rekultywatora zyskuje ostrość.

Wygląda jak błąd. Czy istnieje jakieś obejście tego problemu?

+0

Dla tych, którzy zmierzą się ten sam problem. Znalazłem obejście tego problemu. Nie używam już RecyclerView. Przełączyłem się na tę stronę HorizontalListView lib: https://github.com/sephiroth74/HorizontalVariableListView, która jest wystarczająca dla moich potrzeb. – sNore

Odpowiedz

2

I zmierzyć się z tym samym problemem, co zrobić w moim projekcie lubi poniżej mojej działalności (zawierającego 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; 
    } 

który zapobiega przewijanie kiedy przytrzymać przycisk na D-pada, i ostrości działa dobrze w moim RecyclerView.

+0

thx, spróbuję tego w następnym projekcie! – sNore

0

Mam ten sam problem. Dobrą wiadomością było to, że popularne aplikacje (YouTube i inne) nie mają tego problemu. Znalazłem informacyjny resource. Po śledztwie opracowałem rozwiązanie, które jest dla mnie wygodne. Kluczem jest wykorzystanie Presenter zamiast Adapter Jest najprostszym przykładem

//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(); 
} 
Powiązane problemy