Recyclerview滚动时加载更多丢失的物品单击

时间:2019-09-02 07:44:51

标签: java android android-recyclerview

我对Recyclerview项目点击有疑问。当在list()中向下滚动时,我将数据提取到addItem()方法中并通过addOnScrollListener方法添加到recyclerview自定义适配器中。我在Fragment上单击界面获得了项目位置。首先获取数据可以正常工作,但是在获取loadmore时,无法使用onButtonLClick()方法将项​​目位置重新获取到新数据。

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

1 个答案:

答案 0 :(得分:0)

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

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

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