0

私はアイテムにCardViewを持つフラグメントでrecyclweviewを使用していますが、スクロールが遅すぎると多くの解決策が見えていますが、解決策が見つからない場合は、私のコード怒鳴る、あなたはCardViewのRecyclerViewはスクロール時に遅れます

フラグメント感謝:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_venues_clubs, container, false); 
     ButterKnife.bind(this, view); 

     thisActivity = getActivity(); 
     TAG = "VenuesClubsFragment"; 

     user_id = Utils.getUserId(thisActivity); 
     latitude = SharedPreferenceHelper.getLocationData(thisActivity, SharedPreferenceHelper.LATITUDE); 
     longitude = SharedPreferenceHelper.getLocationData(thisActivity, SharedPreferenceHelper.LONGITUDE); 

     linearLayoutManager = new LinearLayoutManager(thisActivity) { 
      @Override 
      protected int getExtraLayoutSpace(RecyclerView.State state) { 
       return 300; 
      } 
     }; 

     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     rvClubList.setLayoutManager(linearLayoutManager); 

     swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       venuesClubsBarsResponse = null; 
       refreshData(false, false); 
      } 
     }); 

     btnRefresh.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       venuesClubsBarsResponse = null; 
       refreshData(false, false); 
      } 
     }); 

     return view; 
    } 

がsetAdapterMethod:

 private void setUpRecylerViewData() { 
     LogUtils.i(TAG, "size " + venuesClubsBarsResponse.getData().size()); 

     venuesAdapter = new VenuesAdapter(thisActivity, new ArrayList<>(venuesClubsBarsResponse.getData())) { 
      @Override 
      protected int getLastVisiblePosition() { 
       return linearLayoutManager.findLastVisibleItemPosition(); 
      } 

      @Override 
      protected void refreshItems(boolean newOnce, boolean oldOnce) { 
       super.refreshItems(newOnce, oldOnce); 
       if (!isSearchDataAvailable) { 
        refreshData(newOnce, oldOnce); 
       } 
      } 

      @Override 
      protected void onItemClick(int position, VenuesClubsBarsData venuesClubsBarsData) { 
       super.onItemClick(position, venuesClubsBarsData); 
       Intent intent = new Intent(thisActivity, VenueProfileActivity.class); 
       intent.putExtra(EXTRA_PARAM_ID, venuesClubsBarsData.getId()); 
       intent.putExtra(EXTRA_PARAM_NAME, venuesClubsBarsData.getVenueName()); 
       startActivity(intent); 
       Utils.openActivityAnimation(thisActivity); 
      } 
     }; 

     venuesAdapter.addAll(venuesClubsBarsResponse.getData()); 
     rvClubList.setAdapter(venuesAdapter); 
     rvClubList.addOnScrollListener(venuesAdapter.onScrollListener); 
    } 

アダプタ

public abstract class VenuesAdapter extends RecyclerArrayAdapter<VenuesClubsBarsData, RecyclerView.ViewHolder> { 

    public ArrayList<VenuesClubsBarsData> venuesList; 
    private Context context; 
    private int lastAnimatedPosition = -1; 
    public RecyclerView.OnScrollListener onScrollListener; 
    private boolean isFromFavourite = false; 

    public VenuesAdapter(Context context, ArrayList<VenuesClubsBarsData> venuesClubsBarsDataArrayList) { 
     init(context,venuesClubsBarsDataArrayList); 
    } 

    public VenuesAdapter(Context context, ArrayList<VenuesClubsBarsData> venuesClubsBarsDataArrayList, boolean isFromFavourite) { 
     init(context,venuesClubsBarsDataArrayList); 
     this.isFromFavourite = isFromFavourite; 
    } 


    public void init(Context context, ArrayList<VenuesClubsBarsData> venuesClubsBarsDataArrayList) { 
     this.venuesList = venuesClubsBarsDataArrayList; 
     this.context = context; 

     onScrollListener = new RecyclerView.OnScrollListener() { 
      int previousLastVisibleItem = -1; 

      @Override 
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
       super.onScrolled(recyclerView, dx, dy); 

       if (dy > 0) { 
        int totalItem = venuesList.size(); 
        int lastVisiblePosition = getLastVisiblePosition(); 
        if (totalItem > 1 && previousLastVisibleItem != lastVisiblePosition) { 
         boolean refresh = (lastVisiblePosition >= (totalItem - 2)); 
         if (refresh) { 
//       LogUtils.e("scroll down", "===============Scroll Down=============="); 
//       LogUtils.e("last visible position", "==============" + getLastVisiblePosition()); 

          refreshItems(false, true); 
         } 
         previousLastVisibleItem = lastVisiblePosition; 
//      LogUtils.e("previous last visible position", "==============" + previousLastVisibleItem); 
        } 

       } 
      } 
     }; 
    } 

    protected abstract int getLastVisiblePosition(); 

    protected void refreshItems(boolean newOnce, boolean oldOnce) { 
    } 

    protected void onItemClick(int position, VenuesClubsBarsData venuesClubsBarsData) { 
    } 

    public void addVenues(VenuesClubsBarsData venuesClubsBarsData) { 

     int lastPosition = venuesList.size() - 1; 
     venuesList.add(venuesList.size(), venuesClubsBarsData); 
     this.add(lastPosition, venuesClubsBarsData); 
     notifyItemInserted(lastPosition); 
    } 

    public void updateAll(List<VenuesClubsBarsData> clubsBarsDataList) { 
     if (venuesList != null) { 
      venuesList.clear(); 
     } 
     this.clear(); 
     venuesList = new ArrayList<>(); 
     this.addAll(clubsBarsDataList); 
     venuesList.addAll(clubsBarsDataList); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_venues_clubs_bars_list, parent, false); 
     return new CellFeedViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { 
     CellFeedViewHolder holder = (CellFeedViewHolder) viewHolder; 
     VenuesClubsBarsData venuesClubsBarsData = venuesList.get(position); 
     holder.bindData(position, venuesClubsBarsData, isFromFavourite); 
    } 

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

    public class CellFeedViewHolder extends RecyclerView.ViewHolder { 
     @Bind(R.id.iv_venue_featured_pic) 
     ImageView ivVenueFeaturedPic; 
     @Bind(R.id.iv_overlay_image) 
     ImageView ivOverlayImage; 
     @Bind(R.id.tv_rating) 
     CustomFontTextView tvRating; 
     @Bind(R.id.tv_venue_name) 
     CustomFontTextView tvVenueName; 
     @Bind(R.id.tv_followers) 
     CustomFontTextView tvFollowers; 
     @Bind(R.id.tv_city_country) 
     CustomFontTextView tvCityCountry; 
     @Bind(R.id.linear_view) 
     LinearLayout linearView; 
     @Bind(R.id.iv_verified) 
     ImageView ivVerified; 
     @Bind(R.id.iv_icon) 
     ImageView ivIcon; 
     @Bind(R.id.tv_distance) 
     CustomFontTextView tvDistance; 
     @Bind(R.id.cv_club_bar) 
     CardView cvClubBar; 
     int position; 
     VenuesClubsBarsData venuesClubsBarsData; 

     public CellFeedViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 

      cvClubBar.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        onItemClick(position, venuesClubsBarsData); 
       } 
      }); 
     } 

     public void bindData(int position, VenuesClubsBarsData venuesClubsBarsData, boolean isFromFavourite) { 
      this.position = position; 
      this.venuesClubsBarsData = venuesClubsBarsData; 

      tvVenueName.setText(venuesClubsBarsData.getVenueName()); 
      tvRating.setText(venuesClubsBarsData.getRating()); 
      tvFollowers.setText(venuesClubsBarsData.getFollowers() + " followers"); 
      tvCityCountry.setText(venuesClubsBarsData.getCity() + ", " + venuesClubsBarsData.getCountry()); 
      tvDistance.setText(venuesClubsBarsData.getDistance() + " mi"); 
      ivVerified.setVisibility(View.GONE); 
//   if (venuesClubsBarsData.isVerified()) { 
//    ivVerified.setVisibility(View.VISIBLE); 
//   } else { 
//    ivVerified.setVisibility(View.GONE); 
//   } 

      if (isFromFavourite){ 
       ivIcon.setVisibility(View.VISIBLE); 
       if (venuesClubsBarsData.getIsThisClub()){ 
        ivIcon.setImageResource(R.mipmap.club_icon); 
       }else if (venuesClubsBarsData.getIsThisBar()){ 
        ivIcon.setImageResource(R.mipmap.bar_icon); 
       } 
      }else { 
       ivIcon.setVisibility(View.GONE); 
      } 

      if (StringUtils.isValid(venuesClubsBarsData.getVenueFeaturedPic())) { 
       try { 
        String imgUrl = venuesClubsBarsData.getVenueFeaturedPic(); 
        Picasso.with(context).load(imgUrl).placeholder(R.mipmap.logo).into(ivVenueFeaturedPic); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } else { 
       ivVenueFeaturedPic.setImageResource(R.mipmap.logo); 
      } 
     } 
    } 
} 

View.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/cv_club_bar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:cardCornerRadius="4dp" 
    app:cardBackgroundColor="@color/blue" 
    android:layout_margin="4dp" 
    android:clickable="true"> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/Venues_club_imageview_height" 
     android:padding="2dp" 
     android:orientation="vertical"> 


     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@drawable/back_ground"> 

      <ImageView 
       android:id="@+id/iv_venue_featured_pic" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:scaleType="fitXY" 
       tools:src="@mipmap/logo" /> 

      <ImageView 
       android:id="@+id/iv_overlay_image" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@drawable/overlay_screen" 
       android:scaleType="fitCenter" /> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right|top" 
       android:orientation="horizontal"> 

       <whatsfourtwonite.quriousclick.com.whats42nite.widget.CustomFontTextView 
        android:id="@+id/tv_rating" 
        style="@style/text_view_showing_distance" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:paddingStart="10dp" 
        android:textSize="17sp" 
        android:background="@color/toolbar_color" 
        android:drawablePadding="6dp" 
        android:drawableRight="@mipmap/star" 
        android:gravity="left|center_vertical" 
        android:paddingLeft="6dp" 
        android:paddingRight="6dp" 
        tools:text="5.0" /> 

      </LinearLayout> 

      <LinearLayout 
       android:id="@+id/linear_view" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:layout_gravity="bottom" 
       android:layout_marginBottom="20dp" 
       android:paddingLeft="12dp"> 

       <whatsfourtwonite.quriousclick.com.whats42nite.widget.CustomFontTextView 
        android:id="@+id/tv_venue_name" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:background="@color/transparent" 
        android:shadowColor="@color/black" 
        android:shadowDx="3" 
        android:shadowDy="3" 
        android:shadowRadius="5" 
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:textColor="@color/colorPrimary" 
        android:textSize="22sp" 
        android:textStyle="bold" 
        tools:text="Venue Name" /> 


       <whatsfourtwonite.quriousclick.com.whats42nite.widget.CustomFontTextView 
        android:id="@+id/tv_followers" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:background="@color/transparent" 
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:layout_marginTop="-5dp" 
        android:visibility="gone" 
        android:textColor="@color/colorPrimary" 
        android:textSize="15sp" 
        tools:text="2 followers" /> 

       <whatsfourtwonite.quriousclick.com.whats42nite.widget.CustomFontTextView 
        android:id="@+id/tv_city_country" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:background="@color/transparent" 
        android:textAppearance="?android:attr/textAppearanceLarge" 
        android:textColor="@color/white" 
        android:textSize="16sp" 
        tools:text="City, Country" /> 

      </LinearLayout> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right|bottom" 
       android:orientation="vertical"> 

       <ImageView 
        android:layout_width="35dp" 
        android:layout_height="35dp" 
        android:id="@+id/iv_verified" 
        android:visibility="visible" 
        android:layout_gravity="bottom|right" 
        android:src="@mipmap/progress_sm_w03" /> 

       <whatsfourtwonite.quriousclick.com.whats42nite.widget.CustomFontTextView 
        android:id="@+id/tv_distance" 
        style="@style/text_view_showing_distance" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="right|bottom" 
        android:background="@color/toolbar_color" 
        android:textSize="17sp" 
        android:drawableLeft="@mipmap/ic_near_me_white_18dp" 
        android:drawablePadding="3dp" 
        android:gravity="left|center_vertical" 
        tools:text="11.25 mi" /> 
      </LinearLayout> 

      <ImageView 
       android:id="@+id/iv_icon" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:layout_marginLeft="5dp" 
       android:layout_gravity="left|top" 
       android:src="@mipmap/bar_icon" 
       android:visibility="gone" /> 

     </FrameLayout> 

    </LinearLayout> 

</android.support.v7.widget.CardView> 

答えて

0

そのCardViewのないあなたの問題。 RecyclerViewのレイアウトでImageViewのためにinを使用している画像の解像度は です。

  1. drawable /にある高品質の画像を使用している場合は、それらの画像をdrawable-hdpiまたはdrawable-xhdpiに移動します。

2.イメージがリモートサーバーからのものである場合は、適切な解像度のイメージを取得してください。

+0

ありがとうございます。 1.いいえ、私はイメージを使用していません。 2.私はimageviewを削除して、blanck cardviewだけを読み込もうとしましたが、それでも問題は解決しません。 –

+0

背景についてはどうですか? android:background = "@ drawable/overlay_screen"、あなたもそれを削除したいと思います。 –

+0

はい、私はまたアンドロイドを試みました:background = "@ drawable/overlay_screen"、一度削除 –

関連する問題