- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在项目中使用 CardView 的 fragment 中使用 recyclweview 但是当我滚动时滞后太多,我已经看到很多解决方案但我找不到解决方案,如果有人可以帮助我那么这是我的代码,谢谢
fragment :
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;
}
设置适配器方法:
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>
最佳答案
这不是 CardView 的问题。你的图片分辨率是多少在 RecyclerView 的布局中使用 in for ImageView。
2.如果图片来自远程服务器,尝试获取合适分辨率的图片。
关于android - 带有 CardView 的 RecyclerView 在滚动时滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43655137/
我有一个简单的应用程序,它读取数据库,然后经过一些操作将结果写入另一个数据库。 第一行代码使用给用户的消息和屏幕日志更新 ui,然后全部包装在带有 using 和其他 try/catch 的 try/
我有一个名为activity的表,其中有一个memberId和一个时间戳。我想找出在给定的月份中有多少成员执行了一项 Activity (即-在 Activity 表中有记录),但在过去12个月中,谁
我有前三列数据。第一个列表示 id 在前一天做了某件事。我试图通过添加一个新变量“new”来从 dat 转到 dat2,该变量执行三件事: 将 yest 的值复制到前一天。但日子并不总是连续的。因此,
我有一个简单的应用程序,它读取数据库,然后经过一些操作将结果写入另一个数据库。 第一行代码使用给用户的消息和屏幕日志更新 ui,然后全部包装在带有 using 和其他 try/catch 的 try/
我有 data.frame,它显示了股票的当前出价和要价以及我当时的信号。 time bid_price ask_price signal 10:10:01.000500
我无法让网站正常运行。它有许多移动背景并使用 css-invert 过滤器。 请看这里: http://epicstudios.de/blackwhite/ 我的问题是,即使是普通计算机也无法处理移动
我创建了一个矩形对象网格并将它们添加到一个 Pane 中。每个矩形都有一个连接到它的鼠标事件监听器,它由 MouseEvent.Entered 触发器触发。当用户将鼠标移到矩形上时,处理程序只是更改矩
感觉我的笔记本电脑不允许控制台应用程序以一定的速度运行,因为我也尝试过其他应用程序,并且它们也随机滞后。我的机器不老,也不应该这样做,它具有i7-4720HQ CPU @ 2.60GHz(8 CPUs
我现在正面临这个问题。当我的页面加载 (DOM) 时,我调用一个返回 1880 张图像的函数,这些图像存储在 Steam 服务器中。 这些图像在回调之后被添加到我的 DOM 中,该回调返回我的数组响应
我正在尝试创建一个每两秒执行一次函数的应用程序。为了实现这一点,我使用 Timer.scheduledTimer 函数。问题是该函数没有按照应有的那样每两秒执行一次。通常应用程序开始时的间隔是 2 秒
我得到了这个 gps 接收器方法,它将一些数据存储到数据库中。 // GPS private void addGPSListener() { globalconstant.db
我有一个 UISwitch,它可以在切换值时更改其上方 UILabel 的文本。每隔一段时间(大约 2% 的时间)文本不会改变。标签的文本被保存到文本文件中,因此我需要准确性。由于这个问题是间歇性的,
我有一个包含用户帖子的表格 View 。每个帖子都有图片、用户名和帖子本身。刷新控件的操作是使用来自 Parse 的数据重新加载表。除了拉动刷新时的极度延迟外,一切都完美无缺。不知道是因为每个单元格里
我有一个“详细信息”页面,其中显示俱乐部的信息。该页面是一个 UIViewController,由按钮和标签组成,以实现这种外观(就像分组的小表格)。当我在设备上加载此页面时,它比我的应用程序中的任何
我有 ActionSheet 的代码,它可以连接的东西有点慢? @IBAction func showAction(_ sender: UIButton) { let actionSheetC
我的桌面应用程序滞后。我认为 java.awt.image.BufferStrategy 中有问题。 private void render() { BufferStrategy bs
你好,我有一个包含多个页面的 viewpager(使用 fragment 状态寻呼机),以及一些 png 作为这些页面的背景。我已经遵循了在 Ui 中显示位图 (http://developer.an
我在 WPF 窗体上有一个 richtextbox 控件。它有 SpellChecking.IsEnabled 设置为 true 并且 VerticalScrollBarVisibility 设置为
在我的 android 应用程序中,我将数据存储在本地 SQLite 数据库中。在这个数据库的大小小于 8-9 MB 之前,一切都很顺利;然而,一旦数据库大小约为 9 MB,它就会继续在 logcat
我正在开发一个简单的 Android 应用程序,它只有一个 Activity ,一个 WebView。它在我的手机(Android 7.1.2 Nougat 版本)上运行良好,但我收到许多用户的投诉,
我是一名优秀的程序员,十分优秀!