Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 滚动或滑动时,选项卡布局和回收器视图滞后_Android_Performance_Android Recyclerview - Fatal编程技术网

Android 滚动或滑动时,选项卡布局和回收器视图滞后

Android 滚动或滑动时,选项卡布局和回收器视图滞后,android,performance,android-recyclerview,Android,Performance,Android Recyclerview,我创建了一个带有多个recyclerviews选项卡布局的示例应用程序。 但在这里,当我滚动recyclerview或在标签之间滑动时。应用程序滞后,速度非常慢 首先,我在申请时遇到了OutOfMemory错误 android:largeHeap="true" android:hardwareAccelerated="true" 根据清单,它解决了。 但我的应用程序仍然落后很多 (它在EMULATOR中工作得非常好) 请任何人帮我解决我的问题 我的整个项目可以在 回收视图适配器 import

我创建了一个带有多个recyclerviews选项卡布局的示例应用程序。

但在这里,当我滚动recyclerview或在标签之间滑动时。应用程序滞后,速度非常慢

首先,我在申请时遇到了OutOfMemory错误

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);