首页 > 解决方案 > Recyclerview在滚动时加载更多丢失的项目点击

问题描述

我对 Recyclerview 项目单击有问题。当在. list()_ 我通过片段上的点击界面获得项目位置。首先获取数据工作正常,但是当获取更多负载时,无法使用方法将项目位置检索到新数据。addItem()addOnScrollListeneronButtonLClick()

// in onBindViewHolder;

holder.lnl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                try {
                    rcylviewItemNotify.onButtonLClick(position);
                }catch (Throwable e){
                    //interface can be null
                }
            }
});

// addItem() method in adapter;

public void addItem(List<Image> img) {
        for (Image im : img) {
            arrayList.add(im);
        }
        notifyDataSetChanged();
 }

// interface code;

public interface RcylviewItemNotify {
    void onButtonLClick(int position);
}

// in Fragment code;

   public void list() {
        GetServices service = RetrofitInstance.getRetrofitInstance().create(GetServices.class);
        Call<Images> call = service.getImages();
        call.enqueue(new Callback<Images>() {
            @Override
            public void onResponse(Call<Images> call, Response<Images> response) {
                Images body = response.body();
                records = body.getImages();
                adapter.addItem(records);
            }

            @Override
            public void onFailure(Call<Images> call, Throwable t) {
                Toast.makeText(getActivity(), "Network hatası onFailure", Toast.LENGTH_SHORT).show();
                reflesh.setRefreshing(false);
            }
        });
    }

 @Override
    public void onButtonLClick(int position) {
        final String clickId = String.valueOf(records.get(position).getID());
        Toast.makeText(getActivity(), "ID: " + clickId, Toast.LENGTH_SHORT).show();
    }

// recycler settings;

    public void loadView() {
        layoutManager = new GridLayoutManager(getActivity(), 2);
        recyclerView.setLayoutManager(layoutManager);
        Collections.reverse(records);
        adapter = new RecyclerViewAdapter(this,(ArrayList<Image>) records, getActivity());
        recyclerView.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        reflesh.setRefreshing(false);
    }

标签: javaandroidandroid-recyclerview

解决方案


我不确定这是否是您的问题,但您应该使用ViewHolder来获得职位。在您的内部onBindViewHolder

@Override
public void onClick(View view){
    int itemPosition = holder.getAdapterPosition();

    // Then do whatever you need to with the position 
}

推荐阅读