Bonjour à tous,
Je cherche depuis un moment comment afficher correctement ce type de ListView.
J'ai essayé avec un seul layout dans le code suivant :
Mais aussi avec 2 layout :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 private class MessagesAdapter extends BaseAdapter { ArrayList<Message> listeMessages ; public MessagesAdapter(ArrayList<Message> liste) { this.listeMessages=liste; } @Override public int getCount() { return listeMessages.size(); } @Override public Object getItem(int position) { return listeMessages.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; int type; Message message = (Message) getItem(position); Log.i("adapter position", String.valueOf(position) + " texte " + message.getBody() + " type " + String.valueOf(message.getType())); if (convertView == null) { convertView = lInflater.inflate(R.layout.listemessagese, null); viewHolder = new ViewHolder(); if (message.getType() == TYPE_ENTRANT) { viewHolder.mBody = (TextView) convertView.findViewById(R.id.text1); viewHolder.mDate = (TextView) convertView.findViewById(R.id.text2); convertView.findViewById(R.id.wrapper2).setVisibility(View.INVISIBLE); convertView.findViewById(R.id.texts2).setVisibility(View.INVISIBLE); } else { viewHolder.mBody = (TextView) convertView.findViewById(R.id.texts1); viewHolder.mDate = (TextView) convertView.findViewById(R.id.texts2); convertView.findViewById(R.id.typeE).setVisibility(View.INVISIBLE); } convertView.setTag(viewHolder); } else{ viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.mBody.setText(message.getBody()); viewHolder.mDate.setText(convertDate(message.getDate(),"dd MMMM HH:mm ")); return convertView; } }
Le problème vient du setTag et getTag je pense. Dans le 2ème exemple de code. J'ai dans la console affiché :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 private class MessagesAdapter extends BaseAdapter { ArrayList<Message> listeMessages ; public MessagesAdapter(ArrayList<Message> liste) { this.listeMessages=liste; } @Override public int getCount() { return listeMessages.size(); } @Override public Object getItem(int position) { return listeMessages.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; int type; Message message = (Message) getItem(position); Log.i("adapter position", String.valueOf(position) + " texte " + message.getBody() + " type " + String.valueOf(message.getType())); if (convertView == null) { if (message.getType() == TYPE_ENTRANT) { convertView = lInflater.inflate(R.layout.listemessagese, null); } else if (message.getType() == TYPE_SORTANT) { convertView = lInflater.inflate(R.layout.listemessagess, null); } viewHolder = new ViewHolder(); if (message.getType() == TYPE_ENTRANT) { viewHolder.mBody = (TextView) convertView.findViewById(R.id.text1); viewHolder.mDate = (TextView) convertView.findViewById(R.id.text2); } else { viewHolder.mBody = (TextView) convertView.findViewById(R.id.texts1); viewHolder.mDate = (TextView) convertView.findViewById(R.id.texts2); } convertView.setTag(viewHolder); } else{ viewHolder = (ViewHolder) convertView.getTag(); Log.i("recycle","texte "+ message.getBody()+" indice "+viewHolder.mDate.getHint()); } viewHolder.mBody.setText(message.getBody()); viewHolder.mDate.setText(convertDate(message.getDate(),"dd MMMM HH:mm ")); return convertView; } }Le texte dommage est le texte d'un message sortant c'est moi qui l'ai envoyé et il s'affiche comme message entrant. J'espère que je ne suis pas trop confus dans mon explication.
Code : Sélectionner tout - Visualiser dans une fenêtre à part I/recycle: texte Dommage indice type entrant
Merci d'avance.
Partager