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.