Android 如何在不重新设置自定义适配器的情况下刷新ExpandableList
我有一个自定义适配器,它扩展了Android 如何在不重新设置自定义适配器的情况下刷新ExpandableList,android,android-arrayadapter,expandablelistview,baseadapter,Android,Android Arrayadapter,Expandablelistview,Baseadapter,我有一个自定义适配器,它扩展了BaseExpandableListAdapter。该适配器使用LinkedHashMap>变量类型作为源。当一个新数据出现时,我调用.setAdapter方法来刷新可扩展列表,这是非常低效和糟糕的编码。当我更新linkedhashmap并调用notifydatasetchanged和NotifyDataSetValidated时,不会发生任何事情。这是我的填写代码 注意:在我的适配器中,表ID为true LinkedHashMap<String,Array
BaseExpandableListAdapter
。该适配器使用LinkedHashMap>变量类型作为源。当一个新数据出现时,我调用.setAdapter方法来刷新可扩展列表,这是非常低效和糟糕的编码。当我更新linkedhashmap并调用notifydatasetchanged和NotifyDataSetValidated时,不会发生任何事情。这是我的填写代码
注意:在我的适配器中,表ID为true
LinkedHashMap<String,ArrayList<Income>> IncomeList = new LinkedHashMap<>();
SetIncomeTask incomeTask;
IncomesAdapter incomesAdapter;
IncomeDbAdapter incomeDbAdapter;
....
class SetIncomeTask extends AsyncTask<Void,Void,Void>
{
@Override
protected Void doInBackground(Void... params) {
incomeDbAdapter = new IncomeDbAdapter(getActivity());
if(incomeDbAdapter.selectAllCount()>0){
if(groupBy.getSelectedItemPosition() == 0)
IncomeList.putAll(incomeDbAdapter.selectLastEntriesFilterByDate(DefaultValues.lastDays));
else
IncomeList.putAll(incomeDbAdapter.selectLastEntriesFilterByCategory(DefaultValues.lastDays));
return null;
}
else
return null;
}
@Override
protected void onPostExecute(Void v) {
if(IncomeList != null) {
if(incomes.getAdapter()== null) {
if(groupBy.getSelectedItemPosition() == 0)
incomesAdapter = new IncomesAdapter(getActivity(), IncomeList,true);
else
incomesAdapter = new IncomesAdapter(getActivity(), IncomeList,false);
incomes.setAdapter(incomesAdapter);
}else {
incomesAdapter.notifyDataSetChanged();
incomesAdapter.notifyDataSetInvalidated();
}
}
}
}
LinkedHashMap IncomeList=new LinkedHashMap();
SetIncomeTask incomeTask;
不可逆转换器不可逆转换器;
IncomeDbAdapter IncomeDbAdapter;
....
类SetIncomeTask扩展了异步任务
{
@凌驾
受保护的Void doInBackground(Void…参数){
incomeDbAdapter=新的incomeDbAdapter(getActivity());
如果(incomeDbAdapter.selectAllCount()>0){
if(groupBy.getSelectedItemPosition()==0)
IncomeList.putAll(incomeDbAdapter.selectLastEntriesFilterByDate(DefaultValues.lastDays));
其他的
IncomeList.putAll(incomeDbAdapter.selectLastEntriesFilterByCategory(DefaultValues.lastDays));
返回null;
}
其他的
返回null;
}
@凌驾
受保护的void onPostExecute(void v){
if(IncomeList!=null){
if(0.getAdapter()==null){
if(groupBy.getSelectedItemPosition()==0)
IncomeAdapter=新的IncomeAdapter(getActivity(),IncomeList,true);
其他的
IncomeAdapter=新的IncomeAdapter(getActivity(),IncomeList,false);
收入。setAdapter(IncomeAdapter);
}否则{
incomeAdapter.notifyDataSetChanged();
incomeAdapter.notifyDataSetionValidated();
}
}
}
}
默认情况下,使您的适配器为空
,这样每当您调用AsyncTask
时,它都会将适配器设置为null
如果我帮了你,谢谢你。重新设置适配器和实例化(新适配器)是一样的,不是吗?这是非常低效和糟糕的编码。这部分是我想摆脱的。创建新的适配器方式;getView方法将被反复调用。