In mijn android app gebruik ik voor mijn ListView het ViewHolder pattern. Nu laat ik plaatjes zien aan gebruikers die ze dan kunnen "liken". Zodra het plaatje geliked is, updatet het icoontje van de ImageView likeIcon.
Nu is het zo wanneer ik op like druk bij één van de items in de listview hij ook automatisch de icoontjes van andere plaatjes op "liked" zet. Dit wil ik natuurlijk niet, mijn vraag hoe dit op te lossen en hoe kan dit überhaupt?
ViewHolder.java
Heb de onclick ook al veranderd van:
naar:
Blijft hetzelfde resultaat behouden.
Nu is het zo wanneer ik op like druk bij één van de items in de listview hij ook automatisch de icoontjes van andere plaatjes op "liked" zet. Dit wil ik natuurlijk niet, mijn vraag hoe dit op te lossen en hoe kan dit überhaupt?
ViewHolder.java
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| public class MyAdapter extends ArrayAdapter<MyModel> { Context context; int layoutResourceId; List<MyModel> data = null; public MyAdapter(Context context, int layoutResourceId, List<MyModel> data) { super(context, layoutResourceId, data); this.layoutResourceId = layoutResourceId; this.context = context; this.data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; final BlockHolder holder; if (row == null) { LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new BlockHolder(); holder.imgIcon = (ImageView) row.findViewById(R.id.imgIcon); holder.totalVotes = (TextView) row.findViewById(R.id.totalVotes); holder.likeIcon = (ImageView) row.findViewById(R.id.likeIcon); holder.dislikeIcon = (ImageView) row.findViewById(R.id.dislikeIcon); holder.saveIcon = (ImageView) row.findViewById(R.id.saveIcon); row.setTag(holder); } else { holder = (BlockHolder) row.getTag(); } MyModel myBlock = data.get(position); ImageLoader.getInstance().displayImage(myBlock.getImage(), holder.imgIcon); final int totalLikes = myBlock.getLikes() - myBlock.getDislikes(); holder.totalVotes.setText(totalLikes + " likes"); final ImageView like = holder.likeIcon; holder.likeIcon.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // ALSO UPDATES OTHER VIEWS... holder.likeIcon.setBackgroundResource(R.drawable.thumbs_up_mouse); } }); return row; } private static class BlockHolder{ ImageView imgIcon; TextView totalVotes; ImageView dislikeIcon; ImageView likeIcon; ImageView saveIcon; } |
Heb de onclick ook al veranderd van:
Java:
1
| holder.likeIcon.setBackgroundResource(R.drawable.thumbs_up_mouse); |
naar:
Java:
1
| ((ImageView)v).setBackgroundResource(R.drawable.thumbs_up_mouse); |
Blijft hetzelfde resultaat behouden.
[ Voor 4% gewijzigd door Workerbee op 24-07-2013 20:01 ]