A exibição de lista que contém a caixa de seleção e o texto está sendo redefinida na rolagem

Eu desenhei uma gaveta de navegação personalizada com o ListView e o cabeçalho, mas quando eu rolar a lista, a caixa de seleção na lista está desmarcada.

Em segundo lugar, quando clico no botão de reset na parte do cabeçalho, desejo que todas as caixas de seleção no Listview sejam desmarcadas. Eu tenho tentado isso para fazê-lo funcionar, mas incapaz de encontrar qualquer solução ..

Os trechos são

public class NavigationDrawer extends Fragment{
   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.filter_navigation_drawer, container,false);
        drawerListView= ( ListView ) view.findViewById( R.id.listDrawer );
        drawerListView.setOnItemClickListener(new FilterDrawerItemClickListener());

        dataList.add(new FilterDrawerItem("sample1",true));
        dataList.add(new FilterDrawerItem("sample2",true));
        dataList.add(new FilterDrawerItem("sample3",true));
        dataList.add(new FilterDrawerItem("sample4",true));
        dataList.add(new FilterDrawerItem("sample5",true));
        dataList.add(new FilterDrawerItem("sample2",true));
        dataList.add(new FilterDrawerItem("sample2",true));
        dataList.add(new FilterDrawerItem("sample2",true));
        dataList.add(new FilterDrawerItem("sample2",true));

        adapter = new FilterCustomDrawerAdapter(getActivity(), R.layout.drawer_filter,dataList,drawerStatus);
        drawerListView.setAdapter(adapter);
        adapter.getFilterList();

        resetBtn = (TextView)view.findViewById(R.id.filterby_reset);
        if(resetBtn != null){
            resetBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    application.setFilterStatus("reset");
                    for(int i=0; i<dataList.size(); i++){
                       dataList.get(i).setCheckBoxId(false);
                    }
                    adapter.notifyDataSetChanged();
                    // this.onCreateView();
                }
            });
        }

        return view;
    }
}

FilterCustomDrawerAdapter.java

public class FilterCustomDrawerAdapter extends ArrayAdapter<FilterDrawerItem> {

    Context context;
    List<FilterDrawerItem> drawerItemList;
    int layoutResID;
    int item = 0;
    String status;
    List<Integer> filterList = new ArrayList<Integer>();
    DrawerStatus drawerStatus;
    StataApplication application = StataApplication.getInstance();

    HashMap<Integer, Boolean> checked;   // newly added code

    public FilterCustomDrawerAdapter(Context context, int layoutResourceID,
                                     List<FilterDrawerItem> listItems,DrawerStatus drawerStatus) {
        super(context, layoutResourceID, listItems);
        this.context = context;
        this.drawerItemList = listItems;
        this.layoutResID = layoutResourceID;
        this.drawerStatus = drawerStatus;
        checked = new HashMap<Integer, Boolean>(getCount());
    }

    public FilterCustomDrawerAdapter(Context context, int layoutResourceID,
                                     List<FilterDrawerItem> listItems) {
        super(context, layoutResourceID, listItems);
        this.context = context;
        this.drawerItemList = listItems;
        this.layoutResID = layoutResourceID;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        final FilterDrawerItemHolder drawerHolder;
        View view = convertView;

        if (view == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            drawerHolder = new FilterDrawerItemHolder();

            view = inflater.inflate(layoutResID, parent, false);
            drawerHolder.ItemName = (TextView) view.findViewById(R.id.drawer_filterName);
            drawerHolder.checkBox = (CheckBox) view.findViewById(R.id.drawer_cbox);

            view.setTag(drawerHolder);
        } else {
            drawerHolder = (FilterDrawerItemHolder) view.getTag();
        }

        FilterDrawerItem dItem = (FilterDrawerItem) this.drawerItemList.get(position);

        drawerHolder.ItemName.setText(dItem.getItemName());
        TextView resetView = (TextView)view.findViewById(R.id.filterby_reset);
        CheckBox checkBox = (CheckBox) view.findViewById(R.id.drawer_cbox);

        // Newly added code
        Boolean isChecked = checked.get(position);
        checkBox.setChecked(isChecked == null ? false : isChecked);

      // if(application.getFilterStatus() != null) {
           if(checkBox.isChecked()){
               drawerHolder.checkBox.setChecked(false);
           }
      // }

        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
                if (isChecked) {
                    filterList.add(new Integer(position));
                    checked.put(position, true);
                } else {
                    filterList.remove(new Integer(position));
                    checked.put(position, false);
                }
            }
        });

        drawerHolder.checkBox.setTag(position);
        Log.d("FILTER_LIST_SIZE",String.valueOf(filterList.size()));

        return view;
    }

    private static class FilterDrawerItemHolder {
        TextView ItemName;
        CheckBox checkBox;
    }

    public List<Integer> getFilterList(){
        return filterList;
    }
}

Na imagem abaixo, quando rolar a lista, e se eu marcar a caixa de seleção sample1 e sample 2, ela ficará desmarcada na rolagem. e também ao clicar no botão reset no cabeçalho, quero que todas as minhas caixas de verificação sejam desmarcadas. Não é possível fazer isso funcionar ...

ATUALIZAÇÃO 1

 resetBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    List<FilterDrawerItem> adapterDataList = adapter.getDrawerItemList();
                    for(int i=0; i<adapterDataList.size(); i++){  // At this place i am getting the size as 9
                        adapterDataList.get(i).setCheckBoxId(false);
                    }
                    adapter.setDrawerItemList(adapterDataList);
                    adapter.notifyDataSetChanged();
                }
            });

questionAnswers(2)

yourAnswerToTheQuestion