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:

Code (ArticleAdapter.java) (java)
PHP script in nieuw venster Selecteer het PHP script
1
public class ArticleAdapter extends BaseAdapter {

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
private Context context;
private ArrayList<Article> items;

public ArticleAdapter(Context context, ArrayList<Article> items) {
    super();
    this.context = context;
    this.items = items;
}

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:
Code (ArticleAdapter.java) (java)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
@Override
public int getCount() {
    return items.size();
}

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
@Override
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
@Override
public long getItemId(int position) {
    return position;
}


Nu het moeilijkste, de getView() methode:
Code (ArticleAdapter.java) (java)
PHP script in nieuw venster Selecteer het PHP script
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
/**
 * 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.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.