2013-07-02 1 views
0

У меня есть пользовательское listview, у которого есть ImageView слева, а затем EditText, а справа у меня есть другой ImageView, который, во-первых, не имеет источник.Как изменить ресурс изображения элемента, нажатого в виде списка

Тогда у меня есть onItemClickListener в этом представлении. Я хотел бы изменить источник ImageView справа (тот, который изначально не имеет никакого источника) на клике элемента.

Для этого я реализовал этот код:

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      ImageView icone2 = (ImageView) view.findViewById(R.id.icone2_lugar); 
      icone2.setImageResource(R.drawable.flag_origem); 
    } 

ImageView в succefully вставлен на пункт щелкнул. Однако, когда я просматриваю список, я понял, что все остальные элементы, которые находились на том же месте, что и один, щелкнули, прежде чем прокручивать список, также изменили ресурс изображения.

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

Итак, как я могу изменить ресурс элемента clicked в виде списка?

EDIT:

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

     View linha = convertView; 
     ArmazenadorLugar armazenador = null; 

     if (linha == null) { 
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      linha = inflater.inflate(R.layout.linha_lugar, parent, false); 
      armazenador = new ArmazenadorLugar(linha); 
      linha.setTag(armazenador); 
     } else { 
      armazenador = (ArmazenadorLugar) linha.getTag(); 
     } 

     armazenador.popularFormulario(mListaLugares.get(position), mContext); 

     return linha; 
    } 

    public LugarAndroid getItem(int position) { 
     return mListaLugares.get(position); 
    } 
+0

Как вы узнали, виды переработаны в ListViews. Я бы сделал свой собственный адаптер и переопределил getView() и поместил туда логику выбора. –

+0

Фактически этот список уже находится в адаптере, и у меня также есть метод getView. Могли бы написать кусок кода, чтобы просто показать, что вы только что сказали? параметры ta должны быть переданы getView, это int position, View convertView, родитель ViewGroup –

+0

Что произойдет, если вы снова нажмете элемент? Если значок изменится или он останется установленным? –

ответ

1

Я закончил делать это по-другому. Не знаю, лучше ли это, но это работает.

Я создал переменную (imgPosition) в моем адаптере, которая будет удерживать позицию элемента, которая должна установить ресурс изображения. Затем, когда я нажимаю на элемент, слушатель называет

adapter.setImgPosition(position); 
    adapter.getView(position, view, parent); 

я назвал метод GetView в слушателе, чтобы обновить список, потому что GetView вызывает метод (я объясню ниже), чтобы обновить список. В методе GetView класса адаптера я имею следующую логику (элемент позиция исходит от параметра GetView):

holder.setValues(mListaLugares.get(position), mContext, imgPosition == position); 

В держателе:

static class Holder{ 
     private TextView txt1= null; 
     private ImageView img1 = null; 
     private ImageView img2 = null; 

     Holder(View linha) { 
      txt1= (TextView) linha.findViewById(R.id.txt1); 
      img1 = (ImageView) linha.findViewById(R.id.img1); 
      img2 = (ImageView) linha.findViewById(R.id.img2); 
     } 

     void setValues(LugarAndroid lugar, Context mContext, boolean setImg) { 
      img2.setImageResource(0); 
      if(setImg) img2.setImageResource(R.drawable.flag); 

      // Logic to fill up the others views 
     } 

Таким образом, я только установить изображение ресурс элемента щелкнул, когда значение boolean прошло true

0

Если вы используете адаптер с списком объектов, вы можете использовать:

getItem(position), а затем изменить образ ImageView этого конкретного объекта

+0

Спасибо! но getItem возвращает мне только объект, элемент которого представлен в списке. Мне нужно взглянуть на этот объект, не так ли? –

+0

как ваш пользовательский интерфейс инициализируется?Отправьте свой код (объект/адаптер) – marshallino16

+0

Я отредактировал вопрос с помощью двух методов адаптера –

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

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