Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在不重新设置自定义适配器的情况下刷新ExpandableList_Android_Android Arrayadapter_Expandablelistview_Baseadapter - Fatal编程技术网

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方法将被反复调用。