notifyDataSetChanged() - как обновить адаптер?

200
06 декабря 2018, 15:30

Пытаюсь разобраться с ExpandableListView и не пойму как обновить адаптер? когда вызываю адаптер expListAdapter, то он кроме двух методов notifyAll() и notify() ничего больше не видит.

public class MainActivity extends AppCompatActivity {
    ExpandableListView expListView;
    ExpandableListAdapter expListAdapter;
    List<String> expListTitle;
    HashMap<String, List<String>> expListDetail;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        expListView = (ExpandableListView) findViewById(R.id.expListView);
        expListDetail = ListData.loadData();
        expListTitle = new ArrayList<>(expListDetail.keySet());
        expListAdapter = new ListAdapter(this, expListTitle, expListDetail);
        expListView.setAdapter(expListAdapter);

        expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
            @Override
            public void onGroupExpand(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        expListTitle.get(groupPosition) + " Список раскрыт.",
                        Toast.LENGTH_SHORT).show();
                ListData.add();
            }
        });
        expListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        expListTitle.get(groupPosition) + " Список скрыт.",
                        Toast.LENGTH_SHORT).show();
            }
        });
        expListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                                        int groupPosition, int childPosition, long id) {
                Toast.makeText(getApplicationContext(),
                        expListTitle.get(groupPosition)
                                + " : " + expListDetail.get(expListTitle.get(groupPosition))
                                .get(childPosition), Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
    class ListAdapter extends BaseExpandableListAdapter {
        private Context context;
        private List<String> expListTitle;
        private HashMap<String, List<String>> expListDetail;
        public ListAdapter(Context context, List<String> expListTitle,
                           HashMap<String, List<String>> expListDetail) {
            this.context = context;
            this.expListTitle = expListTitle;
            this.expListDetail = expListDetail;
        }
        @Override
        public Object getChild(int listPosition, int expListPosition) {
            return expListDetail.get(
                    expListTitle.get(listPosition)
            ).get(expListPosition);
        }
        @Override
        public long getChildId(int listPosition, int expandedListPosition) {
            return expandedListPosition;
        }
        @Override
        public View getChildView(int listPosition, final int expandedListPosition,
                                 boolean isLastChild, View convertView, ViewGroup parent) {
            // получаем дочерний элемент
            String expListText = (String) getChild(listPosition, expandedListPosition);
            if (convertView == null) {
                LayoutInflater mInflater = (LayoutInflater)
                        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.list_item, null);
            }
            TextView expListTextView = (TextView) convertView.findViewById(R.id.expandedListItem);
            expListTextView.setText(expListText);
            return convertView;
        }
        @Override
        public int getChildrenCount(int listPosition) {
            return expListDetail.get(
                    expListTitle.get(listPosition)
            ).size();
        }
        @Override
        public Object getGroup(int listPosition) {
            return expListTitle.get(listPosition);
        }
        @Override
        public int getGroupCount() {
            return expListTitle.size();
        }
        @Override
        public long getGroupId(int listPosition) {
            return listPosition;
        }
        @Override
        public View getGroupView(int listPosition, boolean isExpanded,
                                 View convertView, ViewGroup parent) {
            // получаем родительский элемент
            String listTitle = (String) getGroup(listPosition);
            if (convertView == null) {
                LayoutInflater mInflater = (LayoutInflater) context.
                        getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = mInflater.inflate(R.layout.list_group, null);
            }
            TextView listTitleTextView = (TextView) convertView
                    .findViewById(R.id.listTitle);
            listTitleTextView.setTypeface(null, Typeface.BOLD);
            listTitleTextView.setText(listTitle);
            return convertView;
        }
        @Override
        public boolean hasStableIds() {
            return false;
        }
        @Override
        public boolean isChildSelectable(int listPosition, int expandedListPosition) {
            return true;
        }
    }

}
Answer 1

Добавьте этот метод в ваш проект и используйте его:

public void setNewItems(List<String> listDataHeader,HashMap<String, List<String>> listChildData) {
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
notifyDataSetChanged();
}
READ ALSO
Почему не работает Autocomplete для SASS в Sublime Text 3?

Почему не работает Autocomplete для SASS в Sublime Text 3?

Установил SASS для саблайма, также ранее был установлен SCSS для Sublime Text 3, но autocomplete всех CSS свойств работает только для SCSSКто знает в чем проблема...

190
Объемная тень для элемента.

Объемная тень для элемента.

Как лаконичнее можно сделать тень для элемента, чтобы он выглядел объемным? На данный момент я создаю отдельный элементbottom-frame-shadow задаю ему...

155
Интересное значение в content (CSS)

Интересное значение в content (CSS)

Сейчас открыл исходный код "эквалайзера" в VK и увидел что он содержит в себе псевдо-элемент ::before, но удивило меня вот что:

153
this.(name function) is not a function [дубликат]

this.(name function) is not a function [дубликат]

На данный вопрос уже ответили:

147