1

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

Когда я нажимаю изображение восхода солнца в одном предмете, многие другие предметы также переключаются. Я хочу знать, как обновляется изображение другого элемента, и как я могу обрабатывать только тот предмет, в котором пользователь нажимает?

My adapter - MyAdapter extends BaseAdapter implements AbsListView.OnScrollListener.

Пожалуйста, дайте мне знать, если с моей стороны требуется какая-либо другая информация.

EDIT: добавление метода getView().

public View getView(int position, View view, ViewGroup parent) { 
      if (position < this.data.size()) { 
       if (view == null) { 
        view = createView(position, parent); 
       } 
       //some other data fill 
       view.findViewById(R.id.sunrise).setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(final View view) { 
          ((ImageView)view.findViewById(R.id.sunrise)).setImageResource(R.drawable.sunset); 
         } 
     }); 
      } else { 
       if (view == null) { 
        LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        view = vi.inflate(R.layout.waiting, null); 
       } 
      } 
      return view; 
    } 
+0

0 0 Код подтверждения: –

+0

@KartikKaushik - добавлен мой код – whoami

ответ

1

Взгляды перерабатываются.This DevBytes video on ListView animation точно объясняет, в чем проблема. В нем описывается, как уведомить фреймворк, что вы не хотите, чтобы конкретный вид был переработан. Это достигается путем вызова setHasTransientState() на вопрос View.

Для лучшего решения, проверьте StableArrayAdapter от this DevBytes video on animating ListView deletion (особенно первые три минуты). StableArrayAdapter переопределяет hasStableIds() для возврата true, что имеет тот же эффект, что и setHasTransientState().

/* 
* Copyright (C) 2013 The Android Open Source Project 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package com.example.android.listviewremovalanimation; 

import java.util.HashMap; 
import java.util.List; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 

public class StableArrayAdapter extends ArrayAdapter<String> { 

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>(); 
    View.OnTouchListener mTouchListener; 

    public StableArrayAdapter(Context context, int textViewResourceId, 
      List<String> objects, View.OnTouchListener listener) { 
     super(context, textViewResourceId, objects); 
     mTouchListener = listener; 
     for (int i = 0; i < objects.size(); ++i) { 
      mIdMap.put(objects.get(i), i); 
     } 
    } 

    @Override 
    public long getItemId(int position) { 
     String item = getItem(position); 
     return mIdMap.get(item); 
    } 

    @Override 
    public boolean hasStableIds() { 
     return true; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     if (view != convertView) { 
      // Add touch listener to every new view to track swipe motion 
      view.setOnTouchListener(mTouchListener); 
     } 
     return view; 
    } 

} 
+0

спасибо за ссылку на видео и код, я изменяю код для использования ArrayAdapter с hasStableIds(), сообщит вам об этом. – whoami

+1

'setHasTransientState()' помог. Благодарю. – whoami

 Смежные вопросы

  • Нет связанных вопросов^_^