我只希望能够像在电话上的“联系人”本机应用程序中显示联系人列表一样(甚至不与服务器通信)。
我有1500个联系人,当我尝试加载回收器视图时,所有项目一次都滞后了2-3秒。
我已经实现了加载更多项目,但是有了加载栏,那不是我想要的。
我已经尝试过线程,执行器,postOnUIThread(),handler.post()甚至AsyncTask-> Override-> doOnBackground。什么都没有。
private class CustomTask extends AsyncTask<Void, Void, Void> {
int inserted;
@Override
protected Void doInBackground(Void... param) {
//Do some work
try {
lcf.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
((BaseActivity) lcf.getActivity()).showProgressDialog();
}
});
int currentSize = contactsLoaded.size();
for (inserted = 0; inserted < lcf.getController().getContacts().size() && contactsLoaded.size() < lcf.getController().getContacts().size(); inserted++) {
contactsLoaded.add(lcf.getController().getContacts().get(currentSize + inserted));
notifyItemRangeInserted(contactsLoaded.size() - 1, inserted);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void param) {
//Print Toast or open dialog
//notifyItemRangeInserted(contactsLoaded.size() - 1, 0);
if(!lcf.getController().isSelectedAffiliated()){
lcf.disclaimerLayout.setVisibility(View.VISIBLE);
}else{
lcf.disclaimerLayout.setVisibility(View.GONE);
}
lcf.isLoading=false;
((BaseActivity) lcf.getActivity()).hideProgressDialog();
}
}
该代码存在于我的适配器中,“ lcf”是对该片段的引用。如果我使用保存在控制器上的已加载列表(从片段引用中获取),然后仅调用notifyDataSetChanged(),则会像地狱一样滞后。因此,通过此CustomTask,我尝试加载每个项目并将其逐个通知给Background任务,希望它可以使项目快速且顺序地弹出,而不会干扰UI线程以不冻结屏幕。没用我现在没有选择了。我已经尝试了一切。