Android 滚动或滑动时,选项卡布局和回收器视图滞后
我创建了一个带有多个recyclerviews选项卡布局的示例应用程序。 但在这里,当我滚动recyclerview或在标签之间滑动时。应用程序滞后,速度非常慢 首先,我在申请时遇到了OutOfMemory错误Android 滚动或滑动时,选项卡布局和回收器视图滞后,android,performance,android-recyclerview,Android,Performance,Android Recyclerview,我创建了一个带有多个recyclerviews选项卡布局的示例应用程序。 但在这里,当我滚动recyclerview或在标签之间滑动时。应用程序滞后,速度非常慢 首先,我在申请时遇到了OutOfMemory错误 android:largeHeap="true" android:hardwareAccelerated="true" 根据清单,它解决了。 但我的应用程序仍然落后很多 (它在EMULATOR中工作得非常好) 请任何人帮我解决我的问题 我的整个项目可以在 回收视图适配器 import
android:largeHeap="true"
android:hardwareAccelerated="true"
根据清单,它解决了。
但我的应用程序仍然落后很多
(它在EMULATOR中工作得非常好)
请任何人帮我解决我的问题
我的整个项目可以在
回收视图适配器
import android.support.design.widget.Snackbar;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
public class VideoManager extends RecyclerView.Adapter<VideoManager.RecyclerViewHolder> {
public static class RecyclerViewHolder extends RecyclerView.ViewHolder {
TextView mName;
ImageView mImage,mShare,mPlay,mDownload;
RecyclerViewHolder(View itemView) {
super(itemView);
mName = (TextView) itemView.findViewById(R.id.title);
mImage = (ImageView) itemView.findViewById(R.id.image);
mShare = (ImageView) itemView.findViewById(R.id.share);
mPlay = (ImageView) itemView.findViewById(R.id.play);
mDownload = (ImageView) itemView.findViewById(R.id.download);
}
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false);
return new RecyclerViewHolder(v);
}
@Override
public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {
// get the single element from the main array
final VideoDatabase items = VideoDatabase.VIDEO[i];
// Set the values
viewHolder.mName.setText(items.get(VideoDatabase.Field.NAME));
viewHolder.mImage.setImageResource(items.geti(VideoDatabase.Field.IMAGE));
viewHolder.mImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar snackbar = Snackbar.make(v, "Streaming", Snackbar.LENGTH_SHORT);
snackbar.show();
}
});
viewHolder.mPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar snackbar = Snackbar.make(v, "Play", Snackbar.LENGTH_SHORT);
snackbar.show();
}
});
viewHolder.mShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar snackbar = Snackbar.make(v, "Sharing", Snackbar.LENGTH_SHORT);
snackbar.show();
}
});
viewHolder.mDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Snackbar snackbar = Snackbar.make(v, "Downloading", Snackbar.LENGTH_SHORT);
snackbar.show();
}
});
}
@Override
public int getItemCount() {
return VideoDatabase.VIDEO.length;
}
}
带有RecyclerViews的TabFragment
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A simple {@link Fragment} subclass.
*/
public class Tab1_videos extends Fragment {
public Tab1_videos() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.tab1_videos, container, false);
RecyclerView rv = (RecyclerView) v.findViewById(R.id.home_recyclerview);
LinearLayoutManager llm = new LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false);
rv.setLayoutManager(llm);
rv.setHasFixedSize(true); // to improve performance
rv.setAdapter(new VideoManager()); // the projectdatabase manager is assigner to the RV
RecyclerView grid = (RecyclerView) v.findViewById(R.id.home_recyclerview2);
LinearLayoutManager llm2 = new GridLayoutManager(getContext(),2);
grid.setLayoutManager(llm2);
grid.setHasFixedSize(true); // to improve performance
grid.setAdapter(new VideoManager()); // the projectdatabase manager is assigner to the RV
return v;
}
}
使用任何图像加载库,如通用图像加载程序 这里使用UIL
`DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.mirlogo)
.showImageForEmptyUri(R.drawable.gallery_no_image)
.showImageOnFail(R.drawable.gallery_image_fail)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoader.getInstance().displayImage(images, viewHolder.mImage, options);
你的图片有多大?低于700x700,大小小于80kb我想你的图片可能太大了。你们有xxhdpi xhdpi hdpi mdpi-etc吗?如果没有,试着把你的图片放到drawable-nodpi中。它已经在drawable(nodpi)中了@Rubinellikunnathu,我也在寻找它。但根据我的知识和工作经验,我也面临着同样的问题,因为我在
onBindViewHolder()
中设置了单击侦听器。
`DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.mirlogo)
.showImageForEmptyUri(R.drawable.gallery_no_image)
.showImageOnFail(R.drawable.gallery_image_fail)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
ImageLoader.getInstance().displayImage(images, viewHolder.mImage, options);