2016-03-18 1 views
1

Так что я смотрел на сотни вопросов, за прошедший день, читая все, и это то, что я собрал ...Ресайклер Просмотр лага на прокрутку вверх и вниз

Один человек сказал добавить следующее:

homeRecyclerView.setHasFixedSize(true); 

, который я пробовал, ничего не сделал, потому что вопрос о прокрутке вниз или вверх отстает? Как для.

Это можно сделать, и я использовал Picasso (возможно, потому что хочу проверить представление перед выполнением вызова сервера). Так что кто-то сказал, что, возможно, система кэширования затрагивает его, удаляет Picasso, а изображения могут по умолчанию иметь изображение, но по-прежнему отстает от ...

Вот заявление в домашней деятельности:

homeRecyclerView = (RecyclerView) findViewById(R.id.home_recycler_view); 
      homeRecyclerView.setHasFixedSize(true); 
    homeAdapter = new HomeAdapter(this, homeList); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
     homeRecyclerView.setLayoutManager(mLayoutManager); 
     homeRecyclerView.setItemAnimator(new DefaultItemAnimator()); 

     homeRecyclerView.setAdapter(homeAdapter); 

    public interface ClickListener { 
     void onClick(View view, int position); 

     void onLongClick(View view, int position); 
    } 

    public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

     private GestureDetector gestureDetector; 
     private MainHome.ClickListener clickListener; 

     public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final MainHome.ClickListener clickListener) { 
      this.clickListener = clickListener; 
      gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public void onLongPress(MotionEvent e) { 
        View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && clickListener != null) { 
         clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 
        } 
       } 
      }); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 
       clickListener.onClick(child, rv.getChildPosition(child)); 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

     } 
    } 

Это дом адаптер:

public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{ 

    private List<items> items; 
    private Context context; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView text; 
     public ImageView pic; 

     public MyViewHolder(View view) { 
      super(view); 
      text = (TextView) view.findViewById(R.id.text); 

      pic = (ImageView) view.findViewById(R.id.pic); 
     } 
     } 

     public HomeAdapter(Context mContext, List<items> items) { 
      context = mContext; 
      this.items = items; 
     } 

     @Override 
     public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View itemView = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.home_item, parent, false); 

      return new MyViewHolder(itemView); 
     } 

     @Override 
     public void onBindViewHolder(MyViewHolder holder, int position) { 

      Typeface myTypeface = Typeface.createFromAsset(context.getAssets(), "font1.ttf"); 
      Typeface myTypefaceItalic = Typeface.createFromAsset(context.getAssets(), "font2.ttf"); 
      Typeface myTypefaceBold = Typeface.createFromAsset(context.getAssets(), "font3.ttf"); 

      Item item = items.get(position); 


      holder.text.setTypeface(myTypefaceBold); 


Picasso.with(context).load(R.drawable.robot).into(holder.pic); 
     } 

     @Override 
     public int getItemCount() { 
      return items.size(); 
     } 


} 

Anyo ne, кто может обратить внимание на то, что может быть причиной этой проблемы или предложений с запаздыванием. Я перешел из ListView с держателем в адаптере для просмотра утилизатор слух, что она мягче и лучше ... но это, кажется, хуже прокрутки ...

ответ

5

Ваша проблема с

Typeface myTypeface = Typeface.createFromAsset(context.getAssets(), "Lato_Regular.ttf"); 
     Typeface myTypefaceItalic = Typeface.createFromAsset(context.getAssets(), "Lato_Italic.ttf"); 
     Typeface myTypefaceBold = Typeface.createFromAsset(context.getAssets(), "Lato_Bold.ttf"); 

Вы инициализируете его каждый раз в представлении привязки. createFromAsset получает некоторую память и вычислительную мощность. Делайте это каждый раз, когда вы вызываете вид привязки и вы имеете задержку прокрутки.

Я бы предложил переместить этот код в свою деятельность и передать его в свой конструктор вида recycler.

Попробуйте это и дайте мне знать, если он решает вашу проблему.

+0

Удивительный, это было! – Lion789

+0

Только что нашел этот пост. Отличный ответ. Работала отлично. Спасибо –

2

Я думаю, что ваша проблема заключается в создании объектов Typeface каждый раз на onBindViewHolder(). Создайте затем конструктор и сохраните ссылку на них.

Кроме того, я буду прикреплять эти шрифты к onCreateViewHolder() вместо onBindViewHolder(), поскольку их не нужно менять при переработке.

Я думаю, что это answer может вам тоже помочь.

+0

Хорошо лучше просто создать класс, к которому я могу получить доступ из любого места или передать его самому адаптеру? – Lion789

+0

Если вы имеете в виду [ответ] (http://stackoverflow.com/a/15338166/5055317), я связан, так как все статично, я бы рекомендовал вам создать этот новый класс, чтобы вы могли использовать все, что захотите. –

+0

Хорошо, я попробую это узнать, если это имеет больше смысла, поскольку я буду повторно использовать шрифты на разных экранах – Lion789

Смежные вопросы