![](/img/trans.png)
[英]adapter.notifyDataSetChanged() not working in android
[英]Yet another Adapter.notifyDataSetChanged() not working - Android
我一直在使用一种方法来填充适配器,如下所示:
onCreate(...)
内的自定义方法中设置UI组件 //..
mRecentSales = new ArrayList<>();
recentSaleAdapter = new RecentSaleAdapter(getApplicationContext(), R.layout.row_recent_sale, mRecentSales);
lvRecentSales.setAdapter(recentSaleAdapter);
//.
onResume()
之后立即在另一个线程中加载适配器的数据 @Override
public void onLoadingPrepare() {
super.onLoadingPrepare();
if (qDaySales == null)
qDaySales = new ArrayList<>();
else
qDaySales.clear();
if (mRecentSales == null)
mRecentSales = new ArrayList<>();
else
mRecentSales.clear();
}
@Override
public void onLoading() {
super.onLoading();
todayIncome = Conversor.asCurrency(presenter.getDaySales());
performance = presenter.getImprovement(getApplicationContext());
for (int i = 1; i<= DateTime.now().getDayOfMonth(); i++){
qDaySales.add(new Entry(i, presenter.getSalesFromDay(i)));
}
mRecentSales.addAll(presenter.getRecentSales());
}
@Override
public void onLoadingComplete() {
super.onLoadingComplete();
tvTodayIncome.setText(todayIncome);
tvPerformance.setText(performance);
setPerformanceChart(qDaySales);
recentSaleAdapter.notifyDataSetChanged();
}
这是适配器代码:
public class RecentSaleAdapter extends ArrayAdapter<MTicket> {
public RecentSaleAdapter(@NonNull Context context, int resource, @NonNull List objects) {
super(context, resource, objects);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_recent_sale, null);
}
MTicket ticket = getItem(position);
TextView tvTicketId = (TextView)convertView.findViewById(R.id.tv_ticket_id);
TextView tvTicketReference = (TextView)convertView.findViewById(R.id.tv_ticket_reference);
TextView tvTicketTotal = (TextView)convertView.findViewById(R.id.tv_ticket_total);
if (ticket != null){
tvTicketId.setText(String.format("# %d", ticket.id));
tvTicketReference.setText(ticket.ticketReference);
tvTicketTotal.setText(ticket.maskSaleTotal);
}
return convertView;
}
@Override
public long getItemId(int position) {
MTicket ticket = getItem(position);
if (ticket != null)
return ticket.id;
return -1;
}
}
结果不是我所期望的,因为列表未显示任何内容。
我最终放弃了异步任务。
似乎有一个错误,Android不会正确处理回调。
这是解决方法:
我没有在onLoading()
方法中填充对象列表,而是在主线程中调用了所有需要的方法。
@Override protected void onResume() { super.onResume(); setTitle(getPreferenceString(SettingsActivity.KEY_BUSINESS_NAME, getString(R.string.set_default_business_name))); start(); // <- This will start the Async Task mRecentSales.clear(); mRecentSales.addAll(presenter.getRecentSales()); recentSaleAdapter.notifyDataSetChanged(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.