所以基本上我可能有50张图片&在每个列表项中都没有太多的数据要加载,但是当我调用setAdapter时,它只需要至少8秒来加载最终用户可见的前3个项目。我添加了日志,发现适配器中的getView()被调用了两次。有什么方法可以减少这个时间吗?
在任何人询问之前,我不能使用AsyncTask,因为我需要在主线程中调用setAdapter并且问题仍然存在。
使用RecycleView会更有效吗?我知道RecycleView是listView的下一个版本,但在设置适配器时我无法看到任何特别的区别。
任何帮助表示赞赏!感谢
更新:这是我的适配器代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder view;
if (convertView == null) {
view = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.fragment_test, null);
view.inActiveView = convertView.findViewById(R.id.front);
view.inActiveRewardTxt = (TextView) convertView.findViewById(R.id.status_lock_reward);
view.inActiveTitleTxt = (TextView) convertView.findViewById(R.id.status_lock_title);
view.completedView = convertView.findViewById(R.id.offerTitlePanel);
view.activeView = convertView.findViewById(R.id.back);
view.offerNumberTxt = (TextView) convertView.findViewById(R.id.offerNumberTxt);
view.walletView = convertView.findViewById(R.id.offerWalletPanel);
view.walletGiftView = (ImageView) convertView.findViewById(R.id.offerGiftImg);
view.rewardTxt = (TextView) convertView.findViewById(R.id.offerWalletRibbonTxt);
view.offerTitleTxt = (TextView) convertView.findViewById(R.id.offerTitleTxt);
view.offerDescTxt = (TextView) convertView.findViewById(R.id.pagerDescTaskTxt);
view.offerActionTxt = (TextView) convertView.findViewById(R.id.offerActionTxt);
view.offerTimerTxt = (TextView) convertView.findViewById(R.id.offerTimerTxt);
view.offerStatusBtn = (TextView) convertView.findViewById(R.id.offerStatusBtn);
view.offerReportBtn = (TextView) convertView.findViewById(R.id.offerReportBtn);
view.dataProgressBar = (ProgressBar) convertView.findViewById(R.id.data_loader);
view.dataLoadedView = convertView.findViewById(R.id.loaded_view);
view.calendarView = (CalendarView) convertView.findViewById(R.id.calendar_view);
view.dataView = convertView.findViewById(R.id.dataView);
view.dataInfoTxt = (TextView) convertView.findViewById(R.id.dataInfoTxt);
view.dataEarnedTxt = (TextView) convertView.findViewById(R.id.dataEarnedTxt);
view.dataProgress = (ProgressBar) convertView.findViewById(R.id.dataProgress);
convertView.setTag(view);
} else {
view = (ViewHolder) convertView.getTag();
}
//display all the values here
return convertView;
答案 0 :(得分:0)
只需根据您提供的代码判断,加载3个视图似乎不需要8秒钟。是否有可能在UI线程上进行任何其他繁重的处理?
答案 1 :(得分:0)
所以我使用了recyclerView来解决这个问题。谢谢你的帮助!