2015-07-26 7 views
1

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

Я попытался AdapterView.OnItemClickListener класса и также пытался добавить определенный OnClickListener на ImageView в классе адаптера и слушающий там работаем, но он не может обновить drawable в ImageView.

Итак, как я могу это сделать?

Это код внутри моего adapter.getView() метода:

holder.getInfos().setText(posts.get(position).toString()); 
    holder.getPp().setProfileId(posts.get(position).getProfile()); 
    holder.getLike().setImageResource(R.drawable.ic_action_like_inactive); 

    holder.getLike().setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      postLiked = !postLiked; holder.getLike().setImageResource(R.drawable.ic_action_like); 

     } 
    }); 
+1

вы назвали notifyDataSetChanged() – has19

+0

и, пожалуйста, предоставьте нам свой код, чтобы я мог помочь вам лучше, если он не сработал – has19

+0

Да, я сделал, все еще не работает – GB11

ответ

0

Как прокомментировал @ has19. На вашем onClick не меняйте выталкиваемый из ImageView, но измените данные, по которым вы выбираете вытаскиваемый в вашем адаптере getView. Затем вызовите notifyDataSetChanged() на свой адаптер после щелчка.

Пример псевдокод:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final MyObject myObject = getItem(position); 

    ImageView imageView = convertView.findViewById(R.id.myImageViewId); 
    imageView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      myObject.setImageSelectionCriteria(someCriteria); 
      MyAdapter.this.notifyDataSetChanged(); 
     } 
    }); 

    if(myObject.getImageSelectionCriteria().equals(someCriteria)) { 
     imageView.setImageResource(R.drawable.some_drawable); 
    } else { 
     imageView.setImageResource(R.drawable.some_other_drawable); 
    } 
} 
+0

Удивительный !!!, спасибо вам. Это решило мою проблему. На самом деле, это так, как вы сказали: «onClick не меняет обратный образ ImageView напрямую». – GB11

0

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

private Boolean clicked=false; 



    holder.getInfos().setText(posts.get(position).toString()); 
    holder.getPp().setProfileId(posts.get(position).getProfile()); 

     if(!clicked) 
     holder.getLike().setImageResource(R.drawable.ic_action_like_inactive); 
     else holder.getLike().setImageResource(R.drawable.ic_action_like); 

    holder.getLike().setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     postLiked = !postLiked; holder.getLike().setImageResource(R.drawable.ic_action_like); 
    clicked=true; 

    } 
}); 
+0

мой код не будет работать на самом деле, вы должны сделать так: «@halafnt сказал иначе, как только вы нажмете на него, он будет изменен для всего вашего вида – has19

+0

Спасибо. Да, ответ @khalafant решил это – GB11

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