DevCorner: pull to refresh e tasto Condividi [FeedReader]

Giuseppe Tripodi
Giuseppe Tripodi Tech Master
DevCorner: pull to refresh e tasto Condividi [FeedReader]

Torniamo ancora una volta con l'appuntamento per la creazione del nostro Feed Reader: ormai siamo letteralmente agli sgoccioli e il nostro lettore è completamente funzionante. Per aggiungere qualche altra chicca, vediamo oggi come implementare il Pull to refresh, per aggiornare la lista degli articoli trascinando la view verso il basso, e il tasto Condividi direttamente dentro l'ActionBar. Pronti per iniziare?

Partiamo con l'aggiunta della gesture per ricaricare la lista: come ben saprete, è ormai uno standard trascinare verso il basso una ListView per aggiornarne i contenuti. Per ottenere questo risultato, per prima cosa modifichiamo il layout dell'activity principale e inseriamo la ListView all'interno di uno SwipeRefreshLayout, in questo modo.


    


A questo punto apriamo il codice Java dell'activity corrispondente e implementiamo l'interfaccia SwipeRefreshLayout.OnRefreshListener.  Dichiariamo quindi un SwipeRefreshLayout, che definiremo all'interno dell'OnCreate (personalizzandone anche i colori), in questo modo:


public class MyActivity extends ActionBarActivity implements Observer, SwipeRefreshLayout.OnRefreshListener
{

    ConnectionHelper cHelper = null;
    XMLParser xmlParser = null;
    ArrayList listaArticoli = null;
    ListView listViewArticoli;
    Context ctx;
    ProgressDialog myProgressDialog;
    SwipeRefreshLayout mSwipeRefreshLayout;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        ctx= this;
        myProgressDialog = new ProgressDialog(ctx);
        myProgressDialog.setCancelable(false);
        mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.container);
        mSwipeRefreshLayout.setOnRefreshListener(this);
        mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
                android.R.color.holo_green_light,
                android.R.color.holo_orange_light,
                android.R.color.holo_red_light);
        listViewArticoli = (ListView) findViewById(R.id.listViewArticoli);
        cHelper = ConnectionHelper.getInstance();
        createDialog();
        loadFeed();
    }

Implementiamo quindi il metodo OnRefresh, facendogli richiamare loadFeed().

@Override
    public void onRefresh() {
                loadFeed();
    }

Infine, all'interno del metodo update specifichiamo che abbiamo finito di ricaricare (altrimenti continueremo a vedere scorrere le barre in alto).

  
  @Override
    public void update(Observable observable, Object data) {
        mSwipeRefreshLayout.setRefreshing(false);
        listaArticoli = (ArrayList) data;
        ArticoloAdapter 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());
                startActivity(toFullArticle);
            }
        });
        myProgressDialog.dismiss();

    }

Affinché tutto questo funzioni, tuttavia, dobbiamo effettuare una piccola modifica all'interno del nostro ConnectionHelper, aggiungendo una riga al costruttore:

    private ConnectionHelper(){
         client = new AsyncHttpClient();
        client.getHttpClient().getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true);
    }

Fatto questo, basterà trascinare in basso l'interfaccia per ricaricare i contenuti: come potete notare è davvero estremamente semplice. Per questo motivo, questo martedì rincariamo la dose e mostriamo anche come aggiungere il tasto Condividi all'interno dell'ActionBar dell'activity dalla quale leggiamo l'articolo completo.

Aggiungiamo un nuovo menu all'omonima cartella, cliccando col destro e aggiungendo un file XML. All'interno, digitiamo quanto segue per definire il tasto di condivisione:




    


A questo punto apriamo la nostra activity FullArticle e modifichiamo il metodo OnCreateOptionsMenu come segue:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.action_bar_share_menu, menu);
        MenuItem item = menu.findItem(R.id.menu_item_share);

        ShareActionProvider myShareActionProvider = (ShareActionProvider) item.getActionProvider();

        Intent myIntent = new Intent();
        myIntent.setAction(Intent.ACTION_SEND);
        myIntent.putExtra(Intent.EXTRA_TEXT, "Dai un'occhiata a questo articolo su AndroidWorld.it: "+titolo+" , "+link);
        myIntent.setType("text/plain");

        myShareActionProvider.setShareIntent(myIntent);

        return true;

    }

Avviando adesso l'applicazione vedremo apparire  il tasto per la condivisione, che utilizzerà lo Share Intent nativo di Android per condividere l'articolo scelto.

Anche per questa settimana è tutto: come sempre trovate il codice completo sulla nostra repository GitHub e potete fare affidamento alla sezione sviluppo del nostro forum qualora abbiate bisogno di aiuto.