2017-08-22 20 views
0

私は3つのRecyclerViewを持っていて、3つすべてスクロールで遅れています。私は多くのことをインターネットで提案しようとしましたが、何も私のRecyclerViewを速くしませんでした。私は下記の解決策を試してみましたRecyclerViewがスクロールで遅れている

そして、いくつかのより多くの

  • Lags when RecyclerView scrolling
  • RecyclerView laggy scrolling
  • Extremely Laggy RecyclerView Performance

      。それらのうちのいくつかは関連性がありません。しかしそれでも、それは遅れます。

      参考のため、以下はRecyclerViewの画像です。ビューの

      There's no image here

      xml(単一チャットバブルのために)。 WhatsAppとほぼ同じです。

      <LinearLayout 
          android:id="@+id/transactionOut" 
          android:layout_width="@dimen/dp300" 
          android:layout_height="wrap_content" 
          android:orientation="vertical" 
          android:visibility="gone" 
          android:layout_gravity="end" 
          android:paddingStart="0dp" 
          android:paddingLeft="0dp" 
          android:paddingEnd="13dp" 
          android:paddingRight="13dp" 
          android:clickable="true" 
          android:background="@drawable/outgoing_chat_bubble"> 
      
          <LinearLayout 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:layout_gravity="start" 
           android:minWidth="@dimen/dp100" 
           android:orientation="horizontal" 
           android:elevation="@dimen/general_margin_or_padding_very_small" 
           android:padding="@dimen/dp10"> 
      
           <ImageView 
            android:id="@+id/transactionImageOut" 
            android:layout_margin="@dimen/dp4" 
            android:layout_width="@dimen/size_transaction" 
            android:layout_height="@dimen/size_transaction" 
            android:padding="3dp" 
            android:visibility="gone" 
            android:src="@drawable/ic_transaction_indication_sent" 
            android:layout_gravity="center_vertical" 
            android:contentDescription="@string/payment_sent"/> 
      
           <TextView 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:layout_marginEnd="4dp" 
            android:layout_marginRight="4dp" 
            android:gravity="center" 
            android:textSize="@dimen/general_for_all" 
            android:text="–" 
            android:textColor="@color/app_font_detail_color"/> 
      
           <style.views.CustomTextView 
            android:id="@+id/transactionAmountOut" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" 
            android:text="@string/progress_loading" 
            android:textColor="@color/app_font_detail_color" 
            android:layout_marginLeft="@dimen/dp4" 
            android:layout_marginStart="@dimen/dp4" 
            android:ellipsize="end" 
            android:maxLines="1" 
            android:textSize="@dimen/general_for_all" 
            appUI:font="@string/appNormalFontName"/> 
      
          </LinearLayout> 
      
          <View 
           android:id="@+id/separatorMessageOut" 
           android:layout_width="match_parent" 
           android:layout_height="0.5dp" 
           android:visibility="gone" 
           android:layout_marginStart="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginEnd="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginRight="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginLeft="@dimen/general_margin_or_padding_very_small" 
           android:background="@color/app_font_detail_color"/> 
      
          <LinearLayout 
           android:id="@+id/layoutMessageOut" 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:gravity="top" 
           android:visibility="gone" 
           android:paddingTop="@dimen/general_margin_or_padding_very_small" 
           android:paddingBottom="@dimen/general_margin_or_padding_very_small"> 
      
           <ImageView 
            android:layout_width="@dimen/size_extra_icon" 
            android:layout_height="@dimen/size_extra_icon" 
            android:layout_marginTop="@dimen/icon_margin_top" 
            android:src="@drawable/ic_sms" 
            android:layout_marginStart="@dimen/general_margin_or_padding_small" 
            android:layout_marginLeft="@dimen/general_margin_or_padding_small" 
            android:visibility="visible" 
            android:contentDescription="@string/design"/> 
      
      
           <TextView 
            android:id="@+id/textMessageOut" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" 
            android:layout_marginStart="@dimen/general_margin_or_padding_very_small" 
            android:layout_marginLeft="@dimen/general_margin_or_padding_very_small" 
            android:textColor="@color/app_font_detail_color" 
            android:text="Text message"/> 
      
          </LinearLayout> 
      
          <View 
           android:id="@+id/separatorNoteOut" 
           android:layout_width="match_parent" 
           android:layout_height="0.5dp" 
           android:visibility="gone" 
           android:layout_marginStart="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginEnd="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginRight="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginLeft="@dimen/general_margin_or_padding_very_small" 
           android:background="@color/app_font_detail_color"/> 
      
          <LinearLayout 
           android:id="@+id/layoutNoteOut" 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:gravity="top" 
           android:visibility="gone" 
           android:paddingTop="@dimen/general_margin_or_padding_very_small" 
           android:paddingBottom="@dimen/general_margin_or_padding_very_small"> 
      
           <ImageView 
            android:layout_width="@dimen/size_extra_icon" 
            android:layout_height="@dimen/size_extra_icon" 
            android:layout_marginTop="@dimen/icon_margin_top" 
            android:src="@drawable/ic_notes" 
            android:layout_marginStart="@dimen/general_margin_or_padding_small" 
            android:layout_marginLeft="@dimen/general_margin_or_padding_small" 
            android:visibility="visible" 
            android:contentDescription="@string/design"/> 
      
      
           <TextView 
            android:id="@+id/textNoteOut" 
            android:layout_width="match_parent" 
            android:layout_height="wrap_content" 
            android:layout_marginStart="@dimen/general_margin_or_padding_very_small" 
            android:layout_marginLeft="@dimen/general_margin_or_padding_very_small" 
            android:textColor="@color/app_font_detail_color" 
            android:text="Text note"/> 
      
          </LinearLayout> 
      
          <View 
           android:layout_width="match_parent" 
           android:layout_height="0.5dp" 
           android:background="@color/app_font_detail_color" 
           android:layout_marginStart="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginEnd="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginRight="@dimen/general_margin_or_padding_very_small" 
           android:layout_marginLeft="@dimen/general_margin_or_padding_very_small"/> 
      
          <LinearLayout 
           android:layout_width="match_parent" 
           android:layout_height="wrap_content" 
           android:orientation="horizontal" 
           android:padding="@dimen/dp6"> 
      
           <LinearLayout 
            android:layout_width="0dp" 
            android:layout_height="match_parent" 
            android:layout_weight="1" 
            android:gravity="start|center_vertical"> 
      
            <style.views.CircleImageView 
             android:id="@+id/bankLogoOut" 
             android:layout_width="24dp" 
             android:layout_height="24dp" 
             android:layout_gravity="center_vertical" 
             android:src="@drawable/placeholder_default" 
             appUI:circular_border_color="@color/profile_border_color" 
             appUI:circular_border_width="@dimen/dp1" /> 
      
            <TextView 
             android:id="@+id/bankNameOut" 
             android:layout_width="wrap_content" 
             android:layout_height="wrap_content" 
             android:layout_marginStart="@dimen/general_margin_or_padding_very_small" 
             android:layout_marginLeft="@dimen/general_margin_or_padding_very_small" 
             android:maxLines="1" 
             android:ellipsize="end" 
             android:text="@string/progress_loading" 
             android:textSize="@dimen/small_size" /> 
      
           </LinearLayout> 
      
           <ImageView 
            android:id="@+id/showDetailImageOut" 
            android:layout_width="0dp" 
            android:layout_weight="0.5" 
            android:layout_height="wrap_content" 
            android:layout_marginRight="@dimen/dp4" 
            android:layout_marginEnd="@dimen/dp4" 
            android:src="@drawable/ic_transaction_more" 
            android:contentDescription="@string/more"/> 
      
           <RelativeLayout 
            android:layout_width="0dp" 
            android:layout_height="match_parent" 
            android:layout_weight="1"> 
      
            <ImageView 
             android:id="@+id/messageStatusImageOut" 
             android:layout_width="@dimen/size_transaction" 
             android:layout_height="@dimen/size_transaction" 
             android:layout_centerVertical="true" 
             android:src="@drawable/ic_pending" 
             android:layout_marginStart="@dimen/general_margin_or_padding_small" 
             android:layout_marginLeft="@dimen/general_margin_or_padding_small" 
             android:visibility="visible" 
             android:contentDescription="@string/design" 
             android:layout_alignParentEnd="true" 
             android:layout_alignParentRight="true"/> 
      
            <style.views.CustomTextView 
             android:id="@+id/transactionDatetimeOut" 
             android:layout_width="match_parent" 
             android:layout_height="wrap_content" 
             android:layout_centerVertical="true" 
             android:gravity="end" 
             android:text="@string/account" 
             android:textColor="@color/app_font_detail_color" 
             android:textSize="@dimen/date_time_stamp" 
             android:layout_toLeftOf="@+id/messageStatusImageOut" 
             android:layout_toStartOf="@+id/messageStatusImageOut" /> 
      
           </RelativeLayout> 
      
      
          </LinearLayout> 
      
      </LinearLayout> 
      

      は、ここでは、アダプタ

      @Override 
      public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
          holder.setIsRecyclable(false); 
          if (holder instanceof HeaderViewHolder) { 
           HeaderViewHolder transactionViewHolder = (HeaderViewHolder) holder; 
           String getTodayDate = (String) filteredList.get(position); 
           transactionViewHolder.setDate(DateUtility.getFormattedDate(getTodayDate)); 
      
          } else if (holder instanceof MainViewHolder) { 
           MainViewHolder viewHolder = (MainViewHolder) holder; 
           try { 
            final History history = (History) filteredList.get(position); 
            viewHolder.setTransaction(history, mContext); 
           } catch (Exception e){ 
            e.printStackTrace(); 
           } 
          } 
      } 
      

      そして、私は他の2 RecyclerView Sを最適化するのに役立つかもしれViewHolder

      private void setTransaction(final History history, final Context context){ 
          String myId = new Session(context).getStringForKey(Session.prIdKey); 
          if(history.getTo().equals(history.getFrom())) { 
      
           transactionSelf.setVisibility(View.VISIBLE); 
           transactionOut.setVisibility(View.GONE); 
           transactionIn.setVisibility(View.GONE); 
      
           transactionAmountSelf.setText(Utils.parseIntoPKR(history.getAmount())); 
           transactionDateTimeSelf.setText(DateUtility.getTimeFromEpoch(history.getEpoch())); 
      
           messageStatusImageSelf.setVisibility(View.VISIBLE); 
           switch (history.getStatus()) { 
            case Constants.STATUS_PENDING: 
             messageStatusImageSelf.setImageResource(R.drawable.ic_pending); 
             break; 
            case Constants.STATUS_FAILED: 
             messageStatusImageSelf.setImageResource(R.drawable.ic_transaction_status_blocked); 
             break; 
            default: 
             messageStatusImageSelf.setImageResource(R.drawable.ic_transaction_status_done); 
             break; 
           } 
      
           LinkedBank associatedBank = history.getSenderBank(); 
           bankNameSelf.setText(associatedBank.fetchAbbreviationAndAccountNumber()); 
      
           if(history.getReceiverNotes() != null && history.getReceiverNotes().length() > 0) { 
            separatorNoteSelf.setVisibility(View.VISIBLE); 
            layoutNoteSelf.setVisibility(View.VISIBLE); 
            textNoteSelf.setText(history.getReceiverNotes()); 
           } else if(history.getSenderNotes() != null && history.getSenderNotes().length() > 0) { 
            separatorNoteSelf.setVisibility(View.VISIBLE); 
            layoutNoteSelf.setVisibility(View.VISIBLE); 
            textNoteSelf.setText(history.getSenderNotes()); 
           } 
      
           transactionSelf.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
             ((OnIndividualTransactionSelection) context).onTransactionSelected(history); 
            } 
           }); 
      
      
          } else if(history.getFrom().equals(myId)) { 
           //from my number -> cash out 
           transactionOut.setVisibility(View.VISIBLE); 
           transactionIn.setVisibility(View.GONE); 
           transactionSelf.setVisibility(View.GONE); 
      
           if(history.getMessage() != null && history.getMessage().length() > 0) { 
            separatorMessageOut.setVisibility(View.VISIBLE); 
            layoutMessageOut.setVisibility(View.VISIBLE); 
            textMessageOut.setText(history.getMessage()); 
           } 
      
           if(history.getSenderNotes() != null && history.getSenderNotes().length() > 0) { 
            separatorNoteOut.setVisibility(View.VISIBLE); 
            layoutNoteOut.setVisibility(View.VISIBLE); 
            textNoteOut.setText(history.getSenderNotes()); 
           } 
      
           messageStatusImageOut.setVisibility(View.VISIBLE); 
           switch (history.getStatus()) { 
            case Constants.STATUS_PENDING: 
             messageStatusImageOut.setImageResource(R.drawable.ic_pending); 
             break; 
            case Constants.STATUS_FAILED: 
             messageStatusImageOut.setImageResource(R.drawable.ic_transaction_status_blocked); 
             break; 
            default: 
             messageStatusImageOut.setImageResource(R.drawable.ic_transaction_status_done); 
             break; 
           } 
      
      
           transactionAmountOut.setText(Utils.parseIntoPKR(history.getAmount())); 
           transactionDatetimeOut.setText(DateUtility.getTimeFromEpoch(history.getEpoch())); 
      
           LinkedBank associatedBank = history.getSenderBank(); 
           bankNameOut.setText(associatedBank.fetchAbbreviationAndAccountNumber()); 
           Picasso.with(context).load(associatedBank.getBankLogo()).placeholder(R.drawable.placeholder_default).error(R.drawable.placeholder_default).into(bankLogoOut); 
      
      
           transactionOut.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
             ((OnIndividualTransactionSelection) context).onTransactionSelected(history); 
            } 
           }); 
      
          } else if(history.getTo().equals(myId)) { 
           transactionIn.setVisibility(View.VISIBLE); 
           transactionOut.setVisibility(View.GONE); 
           transactionSelf.setVisibility(View.GONE); 
      
           if(history.getMessage() != null && history.getMessage().length() > 0) { 
            separatorMessageIn.setVisibility(View.VISIBLE); 
            layoutMessageIn.setVisibility(View.VISIBLE); 
            textMessageIn.setText(history.getMessage()); 
           } 
      
           if(history.getReceiverNotes() != null && history.getReceiverNotes().length() > 0) { 
            separatorNoteIn.setVisibility(View.VISIBLE); 
            layoutNoteIn.setVisibility(View.VISIBLE); 
            textNoteIn.setText(history.getReceiverNotes()); 
           } 
      
      
           transactionAmountIn.setText(Utils.parseIntoPKR(history.getAmount())); 
           transactionDatetimeIn.setText(DateUtility.getTimeFromEpoch(history.getEpoch())); 
      
           LinkedBank associatedBank = history.getReceiverBank(); 
           bankNameIn.setText(associatedBank.fetchAbbreviationAndAccountNumber()); 
           Picasso.with(context).load(associatedBank.getBankLogo()).placeholder(R.drawable.placeholder_default).error(R.drawable.placeholder_default).into(bankLogoIn); 
      
           transactionIn.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
             ((OnIndividualTransactionSelection) context).onTransactionSelected(history); 
      
            } 
           }); 
      
          } 
      
      } 
      

      それの答えのsetTransaction方法ですです。どんな助けも高く評価されます。

  • 答えて

    0

    つの簡単なヒント

    1)あなたは、それはまだスクロールしている間、多くのO処理を削減することができます。これにより、実質的にスクロールのパフォーマンスが向上します

    2)この後、同様の「新規」を見直して、すべてのバインドに割り当てるとスクロールが遅くなります。

    String myId = new Session(context).getStringForKey(Session.prIdKey); 
    
    +0

    回答ありがとうございますが、私は何をどのように削減するか提案が必要ですか?私はすでにコードを何度も読んでいて、何も見つけられませんでした。これは実際にチャットバブルを表示するためのもので、3つのタイプがあります。また、「RecyclerView」には合計4つのビューがあります。何を提案しますか? –

    関連する問題