Recycler view Очень запоздалый - PullRequest
2 голосов
/ 07 июня 2019

Я использую вид рециркулятора для отображения 15 изображений на моем фрагменте.Изображения находятся в папке для рисования.Я пробовал внешние виды, чтобы сделать это, но это намного медленнее и сильно отстает.Следовательно, я использовал представление переработчика, чтобы решить эту проблему.Фрагмент занимает около 8 секунд, чтобы его открыть, и он очень запаздывает.Есть ли выход или альтернатива?Вот мой фрагмент кода:

public class GifFragment extends Fragment {
private View view;
RecyclerView rvMain;

public GifFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    view=inflater.inflate(R.layout.fragment_gif,container,false);


    rvMain =  view.findViewById(R.id.rvMain);

    int sticker[]={R.drawable.kitty1, R.drawable.kitty2, R.drawable.kitty3, R.drawable.kitty4, R.drawable.kitty5
            , R.drawable.kitty6, R.drawable.kitty7, R.drawable.kitty8, R.drawable.kitty9, R.drawable.kitty10
            , R.drawable.kitty11, R.drawable.kitty12, R.drawable.kitty13, R.drawable.kitty14, R.drawable.kitty15};

    MyAdapter adapter = new MyAdapter(sticker);
    rvMain.setLayoutManager(new GridLayoutManager(getContext(), 3));
    adapter.setHasStableIds(true);
    rvMain.setAdapter(adapter);
    return view;
}

private class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {


    int sticker[];

    public MyAdapter( int sticker[]) {
        this.sticker=sticker;
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_item, parent, false);
        MyViewHolder viewHolder = new MyViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.logo.setImageResource(sticker[position]);
        holder.logo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "This is: " , Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public int getItemCount() {
        return sticker.length;
    }
}
private class MyViewHolder extends RecyclerView.ViewHolder{

    public ImageView logo;
    public TextView name;

    public MyViewHolder(View itemView) {
        super(itemView);
        logo = (ImageView)itemView.findViewById(R.id.ivLogo);

    }
}

}

Ответы [ 3 ]

3 голосов
/ 07 июня 2019

Используйте Glide для эффективной загрузки изображений.

Пример В модуле приложения gradle добавить это

repositories {
  mavenCentral()
  google()
}

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.9.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

затем использовать для скольжения для загрузки изображений с drawable

Glide.with(this).load(R.drawable.image_name).into(imageView);

Пример

onBindViewHolder сделать это

Glide.with(this).load(sticker[position]).into(holder.logo);
0 голосов
/ 07 июня 2019

Используйте библиотеку Picasso для загрузки изображения или переместите изображения в папку mipmap .

Ссылка Пикассо https://square.github.io/picasso/

0 голосов
/ 07 июня 2019

Рассмотрите возможность использования библиотеки загрузчиков изображений, т.е. Glide.Таким образом, вы можете загружать изображения асинхронно.

Дополнительная информация о скольжении:

https://github.com/bumptech/glide

...