Zorgen voor een lijstvuller
Om een lijst te vullen heb je in Android een adapter nodig. Een adapter zorgt ervoor dat je eigen objecten op een goede manier in een lijst weergegeven worden. In deze tutorial gaan we er zelf een bouwen. Maak een nieuwe class genaamd ArticleAdapter. Zorg er nu voor dat deze class BaseAdapter extend:
Nu komt er als het goed is een rood lijntje onder BaseAdapter. Dit komt omdat je hem nog niet hebt geïmport. Dit is vergelijkbaar met PHP's use statement voor namespaces. Ga met je muis over BaseAdapter en klik op Import 'BaseAdapter' (android.widget). Nu is het rode lijntje als het goed is weg, maar nu staat er weer een onder ArticleAdapter. Dit komt omdat BaseAdapter nog een paar abstract methods heeft die je moet overriden. Ga met je muis over ArticleAdapter en klik op Add unimplemented methods. Als het goed is komen er nu een paar methods bij. Als eerste gaan we zorgen voor een goede constructor en variables. Deze zien er als volgt uit:
Code (ArticleAdapter.java) (java)
De Context is de belangrijkste class in Android, met een Context kan je heel veel, en die hebben we in deze class dus ook nodig. Een ArrayList is een array, maar dan in objectvorm. De <Article> betekent dat deze ArrayList alleen Article objecten bevat. In de constructor callen we eerst de constructor van BaseAdapter en dan zetten we alles in deze class. Omdat er rode lijntjes onder de classnamen staan, druk je op de sneltoets Ctrl+Shift+O of ga naar Source -> Organize imports. Nu zijn de rode lijntjes weg, maar er staan nu gele lijntjes onder de variables. Dit komt omdat we ze nog niet gebruiken.
Nu gaan we de method getCount() implementen. Dat is eigenlijk heel simpel, je returnt de count van items, dus als volgt:
Als het goed is nu ook meteen het gele lijntje onder items weg.
Nu gaan we getItem() implementen, hierbij hoef je alleen maar een object te returnen:
Code (ArticleAdapter.java) (java)
1
2
3
4
2
3
4
@Override
public Object getItem(int position) {
return items.get(position);
}
public Object getItem(int position) {
return items.get(position);
}
Nu getItemId(). Bij ons zijn de IDs hetzelfde als de posities, dus dat is wel erg simpel:
Code (ArticleAdapter.java) (java)
1
2
3
4
2
3
4
@Override
public long getItemId(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
Nu het moeilijkste, de getView() methode:
Code (ArticleAdapter.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
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
/**
* Dit wordt gebruikt voor een hogere snelheid
*/
static class ViewHolder {
public TextView title;
public TextView text;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
// Zorg ervoor dat we een layout kunnen maken
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Zorg voor een standaard view met 2 regels
view = inflater.inflate(android.R.layout.simple_list_item_2,
parent, false);
// We gaan voor wat snelheid zorgen
ViewHolder viewHolder = new ViewHolder();
viewHolder.title = (TextView) view.findViewById(android.R.id.text1);
viewHolder.text = (TextView) view.findViewById(android.R.id.text2);
// En deze snelheid opslaan
view.setTag(viewHolder);
}
// Hier kunnen we de snelheid weer terugkrijgen
ViewHolder holder = (ViewHolder) view.getTag();
// Dit is ons artikel dat we moeten laten zien
final Article article = items.get(position);
// We gaan op de eerste regel een titel laten zien
holder.title.setText(article.getTitle());
// En op de tweede regel wat content
holder.text.setText(article.getContent());
// En nu gaan we zorgen dat er een 'Toast' verschijnt als je op het item
// klikt
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Hier maken we een 'Toast'
Toast.makeText(
context,
"Je hebt op artikel " + article.getId()
+ " geklikt met slug " + article.getSlug(),
Toast.LENGTH_LONG).show();
}
});
return view;
}
* Dit wordt gebruikt voor een hogere snelheid
*/
static class ViewHolder {
public TextView title;
public TextView text;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
// Zorg ervoor dat we een layout kunnen maken
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Zorg voor een standaard view met 2 regels
view = inflater.inflate(android.R.layout.simple_list_item_2,
parent, false);
// We gaan voor wat snelheid zorgen
ViewHolder viewHolder = new ViewHolder();
viewHolder.title = (TextView) view.findViewById(android.R.id.text1);
viewHolder.text = (TextView) view.findViewById(android.R.id.text2);
// En deze snelheid opslaan
view.setTag(viewHolder);
}
// Hier kunnen we de snelheid weer terugkrijgen
ViewHolder holder = (ViewHolder) view.getTag();
// Dit is ons artikel dat we moeten laten zien
final Article article = items.get(position);
// We gaan op de eerste regel een titel laten zien
holder.title.setText(article.getTitle());
// En op de tweede regel wat content
holder.text.setText(article.getContent());
// En nu gaan we zorgen dat er een 'Toast' verschijnt als je op het item
// klikt
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Hier maken we een 'Toast'
Toast.makeText(
context,
"Je hebt op artikel " + article.getId()
+ " geklikt met slug " + article.getSlug(),
Toast.LENGTH_LONG).show();
}
});
return view;
}
Druk weer eerst op Ctrl+Shift+O. Ik hoop dat je het begrijpt als je het commentaar leest. Zo niet, laat dan vooral een reactie achter.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Het serverside gedeelte
- Installatie Android SDK
- Een eerste start
- De layout
- Zorgen voor een lijstvuller
- De lijst vullen
- Verbinding met internet
- Dat was het