Android notifyDataSetChanged не работает

У меня есть адаптер, который заполняет ListView двумя TextView данными из TreeMap. Когда пользователь добавляет или удаляет данные из ListView, представление должно обновляться.

Итак, вот мой адаптер:

public class MyAdapter extends BaseAdapter {
    private final ArrayList mData;

    public MyAdapter(Map<String, String> map) {
        mData = new ArrayList();
        mData.addAll(map.entrySet());
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Map.Entry<String, String> getItem(int position) {
        return (Map.Entry) mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO implement you own logic with ID
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final View result;

        if (convertView == null) {
            result = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_adapter_item, parent, false);
        } else {
            result = convertView;
        }
    Map.Entry<String, String> item = getItem(position);

    // TODO replace findViewById by ViewHolder
    ((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey());
    ((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());

    return result;
}}

Поскольку я хочу обновить представление из диалогового окна, а по другому вопросу я прочитал, что notifyDataSetChanged() нужно вызывать из UIThread, я поместил свой notifyDataSetChanged() в Runnable. вот оно:

Runnable run = new Runnable(){
        public void run(){
            Log.v("in the Runnable: ", String.valueOf(colorHashMap));
            adapter.notifyDataSetChanged();
        }
    };

И вот как Runnable вызывается в диалоговом окне:

DefaultColorActivity.this.runOnUiThread(run);

Но независимо от того, что я пытаюсь или делаю, список просто не будет обновляться. Мне нужно закрыть и снова открыть действие, чтобы получить новый список.


person globus243    schedule 27.02.2015    source источник
comment
где вы добавляете и удаляете данные из кода списка?   -  person Nagaraju V    schedule 27.02.2015


Ответы (4)


создайте метод в своем adapter, например:

 public void updateList(){
   notifyDataSetChanged() 
 }

и вызывайте этот метод, когда хотите обновить список

person hrskrs    schedule 27.02.2015

Вызовите метод notifyDataSetChanged() из вашего класса адаптера (в методе getView()), который расширяет BaseAdapter после удаления элемента.

person Android Developer    schedule 27.02.2015
comment
не могли бы вы привести краткий пример, где что добавить? - person globus243; 27.02.2015
comment
см. этот пример, это то, что вам нужно tutorialsbuzz.com/2014/09/ - person Android Developer; 27.02.2015

Прежде всего, вы должны внести изменения в карту (источник данных адаптера). И используйте класс Handler (Android OS Thread) для запуска потока, подобного этому

    Handler handler=new Handler();
    handler.post(run);
person Viral Thakker    schedule 27.02.2015

вы не можете создать объект списка.

просто создайте ссылку и назначьте список своему списку

удалите этот оператор в вашем классе адаптера

mData = новый ArrayList();

person Ganpat Kaliya    schedule 07.09.2015