首页 > 解决方案 > 分页找不到当前位置

问题描述

我最近使用改造创建了一个带有 Api 的 recyclerview。我使用 OnScrollListener 进行了分页,它正在工作。但是当我点击某个文件时找不到它的位置,我该如何解决这个错误?

我在论坛中查看了有关它的信息,但没有找到与改造相关的任何内容。我只想选择文件并将其发送到另一个活动,以发送正确的 ID。

public class AcervoFragment extends Fragment {
    private Retrofit retrofit;
    private RecyclerView recyclerView;
    private AcervoAdaptador acervoAdaptador;
    private ProgressBar progressBar2;
    private List<Lancamentos> listaLancamentos = new ArrayList<>();
    private int pagina;
    private boolean aptoCarregar;

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


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_acervo, container, false);
        recyclerView = view.findViewById(R.id.recyclerViewAcervo);
        acervoAdaptador = new AcervoAdaptador(getActivity());
        recyclerView.setAdapter(acervoAdaptador);
        recyclerView.setHasFixedSize(true);
        final GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
        recyclerView.setLayoutManager(layoutManager);

        retrofit = new Retrofit.Builder()
                .baseUrl("api")
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                if (dy > 0) {
                    int visibleItemCount = layoutManager.getChildCount();
                    int totalIntemCount = layoutManager.getItemCount();
                    int pastVisibleItems = layoutManager.findFirstVisibleItemPosition();
                    if (aptoCarregar) {
                        if ((visibleItemCount + pastVisibleItems) >= totalIntemCount) {
                            Log.i("TAG", "Carregando");
                            aptoCarregar = false;
                            pagina += 1;
                            obterDados(pagina);
                        }
                    }

                }
            }
        });
        aptoCarregar = true;
        pagina = 1;
        obterDados(pagina);
        return view;
    }

    public void obterDados(int pagina) {

        AcervoService service = retrofit.create(AcervoService.class);
        Call<UltimosLancados> ultimosLancadosCall = service.obterAcervo(pagina);

        ultimosLancadosCall.enqueue(new Callback<UltimosLancados>() {
            @Override
            public void onResponse(Call<UltimosLancados> call, Response<UltimosLancados> response) {
                aptoCarregar = true;
                if (response.isSuccessful()) {
                    UltimosLancados ultimosLancados = response.body();
                    final ArrayList<Lancamentos> listaAcervo = ultimosLancados.getDados();

                    //progressBar2.setVisibility(View.GONE);

                    recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), recyclerView, new RecyclerItemClickListener.OnItemClickListener() {
                        @Override
                        public void onItemClick(View view, int position) {
                            Lancamentos p = listaAcervo.get(position);
                            String aString = Integer.toString(p.getId());
                            int aInt = Integer.parseInt(aString);

                            Intent i = new Intent(getActivity().getApplicationContext(), PerfilActivity.class);
                            i.putExtra("ID", aInt);
                            startActivity(i);

                        }

                        @Override
                        public void onLongItemClick(View view, int position) {

                        }

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        }
                    }));

                    acervoAdaptador.adicionarItem(listaAcervo);

                } else {
                    Log.e("TAG", "onResponse" + response.errorBody());
                }
            }

            @Override
            public void onFailure(Call<UltimosLancados> call, Throwable t) {
                aptoCarregar = true;
                Log.e("TAG", "onFailure" + t.getMessage());

            }
        });

    }

}

07-26 20:02:29.382 21112-21112/site.exemplo.project E/InputEventReceiver: Exception dispatching input event.
07-26 20:02:29.382 21112-21112/site.exemplo.project E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
07-26 20:02:29.392 21112-21112/site.exemplo.project E/MessageQueue-JNI: java.lang.IndexOutOfBoundsException: Invalid index 45, size is 40
        at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
        at java.util.ArrayList.get(ArrayList.java:308)
        at site.exemplo.project.AcervoFragment$2$1.onItemClick(AcervoFragment.java:108)
        at site.exemplo.project.RecyclerItemClickListener.onInterceptTouchEvent(RecyclerItemClickListener.java:26)
        at android.support.v7.widget.RecyclerView.dispatchOnItemTouch(RecyclerView.java:2916)
        at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:3044)
        at android.view.View.dispatchTouchEvent(View.java:8808)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2569)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2239)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2607)
        at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1779)
        at android.app.Activity.dispatchTouchEvent(Activity.java:2846)
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2568)
        at android.view.View.dispatchPointerEvent(View.java:9003)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4209)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4072)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3627)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3680)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3646)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3763)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3654)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3820)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3627)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3680)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3646)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3654)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3627)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5910)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5884)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5855)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6000)
    	at android.view.InputEventReceiver.dispatchInputEven

标签: javaandroidretrofit

解决方案


推荐阅读