2013-12-01 5 views
0

У меня есть это на моей основной деятельности:ListView элемент нажмите применения к другим элементам

listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> av, View v, int position, 
        long id) { 
       TextView wrapper = (TextView) v.findViewById(R.id.title); 
       VideoModel o = (VideoModel) videoAdapter.getItem(position); 
       wrapper.setText(o.title); 
      } 
     }); 

Этот код (как вы могли бы догадаться) изменяет TextView представления списка строки (который является макет). Проблема в том, что по какой-то причине, когда я нажимаю на первую строку, текст изменяется, но также изменяется на третьей строке (с тем же текстом).

Какие-либо из них?

Если вы хотите увидеть весь код, обратитесь к How to call method from activity to change layout?

+0

Вы хотите только показать название элемента, который нажал ?? –

+0

в этом случае да, но это всего лишь пример – jplozano

ответ

0

Не изменить просмотры в setOnItemClickListener вместо изменить свои данные и сообщить адаптер так, что адаптер будет изменить интерфейс.

Пример:

Модель

class VideoModel { 

public String title; 
public String videoUrl; 
public String imageUrl; 
public boolean isTitleVisible; 
} 

адаптер

public class VideoAdapter extends BaseAdapter{ 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     VideoLayout view; 
     if (convertView == null) { 
      view = (VideoLayout) LayoutInflater.from(context).inflate(R.layout.video, parent, false); 
     }else{ 
      view = (VideoLayout) convertView; 
     } 

     VideoModel item = (VideoModel) getItem(position); 
     if (item != null) { 

      view.prepare(item); 
if(item.isTitleVisible){ 
view.changeTitle(""); 
} 
     } 

     return view; 
    } 
    } 

по щелчку слушателя:

@Override 
     public void onItemClick(AdapterView<?> av, View v, int position, 
       long id) { 
      videoItems.get(position).isTitleVisible=! videoItems.get(position).isTitleVisible; 
videoAdapter.notifyDatasetChange(); 
     } 

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

+0

, можете ли вы привести мне пример? – jplozano

+0

Оформить заказ отредактированных ан, я добавил пример того, как это сделать. –

+0

Хорошо, я понял! Спасибо. Но что, если я хочу изменить, скажем, цвет текста или размер изображения? Где включить все методы изменения пользовательского интерфейса (которые не обязательно связаны с изменениями данных)? – jplozano

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