java - 分页找不到当前位置
问题描述
我最近使用改造创建了一个带有 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
解决方案
推荐阅读
- android - android\gradlew.bat" 异常退出进程异常flutter
- php - 尝试使用从另一个站点的 wordpress 数据库中动态获取的数据在新网页中创建菜单
- html - 在 CSS 中,“仅移动屏幕”不适用于主页面,但适用于子页面
- selenium - 如何使用 jmeter 中的 selenium webdriver 采样器在 IE 的新选项卡中打开链接?
- scala - Spark(Scala):来自数据帧计数()的 println 的流氓“%”符号
- jasmine - 无法使用 ProtractorJS 更新 Testrail 中的结果
- node.js - 如何在 Node js 中使用 Content-Type: application/octet-stream 发送 POST 请求文件
- python - 查找以二维数组表示的多边形的角
- python - 具有默认参数的 Python 函数参数
- python - 如何从pytorch中的gpu返回cpu?