Вопрос

У меня есть элемент счетчика Android, в котором строки состоят из TextView и ImageView (звездочка, обозначающая, что пользователь отметил этот конкретный элемент как избранный).Теперь, когда пользователь добавляет элемент в избранное, я хочу, чтобы звездочка появлялась рядом с этим элементом в списке счетчиков, поэтому я хочу перерисовать счетчик, чтобы отображать обновленные изображения.Как мне это сделать?

Сейчас я создаю совершенно новый счетчик с соответствующими изображениями.Это заставляет мой счетчик устанавливать выбранный элемент на первый элемент в списке, что раздражает — я хочу, чтобы он оставался прежним.я пытался

spinner.setSelection(selectedItem);

Это работает для ЛЮБОГО числа, отличного от числа, которое мне действительно нужно (положение текущего выбранного элемента), затем оно снова устанавливает выбранный элемент счетчика первым в списке.

Так:как я могу перерисовать список с обновленной информацией без необходимости воссоздавать весь список или, альтернативно, как я могу воссоздать список и при этом сохранить выбор элемента счетчика?

Чтобы уточнить:вот что я делаю

// Callback for "favourite"-button
star.setOnClickListener(new ImageButton.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // Toggle favourite
            getActiveSelection().setStarred(getActiveSelection().isStarred() ? false : true);
            reloadText();
            createSpinner();
        }
    });

 private void createSpinner() {

    spinner = ((Spinner)findViewById(R.id.spinner));

    ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
    HashMap<String, Object> map = new HashMap<String, Object>();

    // Populate spinner item list
    for(int i=0; i<N; i++) {
        SpinnerItem item = getSpinnerItem(i);
        map = new HashMap<String, Object>();
        map.put("Name", item.getName());
        map.put("Icon", (item.isStarred() ? "On" : "Off"));
        list.add(map);
    }        

    MySpinnerAdapter aspn = new MySpinnerAdapter(this, list,
            R.layout.spinner, new String[] { "Name", "Icon" },
            new int[] { R.id.spinnerrow, R.id.spinnerrowicon });


    spinner.setAdapter(aspn);
    spinner.setSelection(getActiveSelection().getSpinnerPosition());
}
Это было полезно?

Решение

Вы можете просто обновить spinner adapter - сообщить, какой элемент отмечен звездочкой, когда пользователь нажимает на значок звездочки (star.setOnClickListener...).Что бы я сделал:

  1. При создании адаптера вы передаете только список полей «Имя», значок не нужен (по умолчанию все не помечены звездочкой).
  2. Вы добавляете в адаптер отдельную функцию для установки помеченного элемента. (setStarred(String name))
  3. При первом вызове вызовите setStarred установить первоначальный выбор (если есть)
  4. в звезде.setOnClickListener реализация, звоните setStarred для помеченного элемента на адаптере, который вы получаете как (MySpinnerAdapter)spinner.getAdapter()

Другие советы

или просто попробуйте:

spinner.setSelection(getActiveSelection().getSpinnerPosition(),true);
.

Это работало для меня, чтобы обновить спиннер ...

Вам необходимо позвонить в notifyDataSetChanged() на вашем адаптере спина, когда ваши данные изменились.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top