DevCorner620

DevCorner: modifichiamo gli articoli letti nella listview [FeedReader]

Giuseppe Tripodi -

Riprende la rubrica più apprezzata dagli sviluppatori (o almeno ce lo auguriamo!) e torna l’appuntamento con il lettore di feed che stiamo portando faticosamente avanti. Questa volta vedremo come modificare l’aspetto di un articolo letto all’interno della listview, rendendo titolo e immagine più chiari.

Per prima cosa modifichiamo la classe Articolo, aggiungendo un booleano chiamato letto, aggiungendo i relativi getter e setter e impostandolo a falso nel costruttore:

public class Articolo {
    private String titolo;
    private String autore;
    private String link;
    private Date dataPubblicazione;
    private String intro;
    private String contenuto;
    private String immagine;
    private boolean letto;

    public boolean isLetto() {
        return letto;
    }

    public void setLetto(boolean letto) {
        this.letto = letto;
    }

Proseguiamo poi modificando l’adapter della ListView che, dopo aver controllato se l’articolo corrente è stato letto o meno, in caso positivo imposta il colore di titolo e autore a grigio chiaro e imposta la proprietà Alpha (un float che regola l’opacità) della SmartImageView a 0.5f, ossia la metà del valore massimo.

 if(articoloCorrente.isLetto())
        {
            titolo.setTextColor(Color.LTGRAY);
            autore.setTextColor(Color.LTGRAY);
            immagine.setAlpha(0.50f);
        }else
        {
            titolo.setTextColor(Color.BLACK);
            autore.setTextColor(Color.BLACK);
            immagine.setAlpha(1f);
        }

Infine, apriamo il codice dell’activity principale dove andiamo a modificare due metodi: per prima cosa sul clic dell’elemento impostiamo a vero il valore booleano “lettto”, quindi andiamo ad eseguire l’override del metodo OnResume per fare in modo che, tornando indietro dalla lettura di un articolo, venga ricaricata la listview.

    @Override
    public void update(Observable observable, Object data) {
        mSwipeRefreshLayout.setRefreshing(false);
        listaArticoli = (ArrayList) data;
        mArticoloAdapter = new ArticoloAdapter(this,listaArticoli);
        listViewArticoli.setAdapter(mArticoloAdapter);
        listViewArticoli.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView> av, View view, int i, long l)
            {
                Intent toFullArticle = new Intent(ctx, FullArticle.class);
                toFullArticle.putExtra("titoloArticolo",listaArticoli.get(i).getTitolo());
                toFullArticle.putExtra("contenutoArticolo",listaArticoli.get(i).getContenuto());
                toFullArticle.putExtra("link", listaArticoli.get(i).getLink());
                listaArticoli.get(i).setLetto(true);
                startActivity(toFullArticle);
            }
        });
        myProgressDialog.dismiss();

    }

    @Override protected void onResume() {
        super.onResume();
        if(mArticoloAdapter!=null) {
            mArticoloAdapter = new ArticoloAdapter(this, listaArticoli);
            listViewArticoli.setAdapter(mArticoloAdapter);

        }
    }

Come potrete constatare da voi, adesso ogni volta che tornerete indietro dopo aver letto un pezzo troverete l’articolo più chiaro rispetto agli altri. Ovviamente la modifica estetica viene persa nel caso in cui ricarichiate la listview o usciate dall’applicazione, visto che non stiamo ancora lavorando con un database. Anche per questa settimana è tutto: come sempre potete chiedere aiuto nella sezione sviluppo del nostro forum e trovare il codice completo dell’applicazione su Github. Buon sviluppo e buona lettura a tutti!