Parsing della riga di comando in Python con Click
Forse Click è la migliore libreria per il parsing della riga di comando che ho provato in Python.
E' stata veramente facile usarla; prima di tutto installiamola:
$ pip install click
Forse Click è la migliore libreria per il parsing della riga di comando che ho provato in Python.
E' stata veramente facile usarla; prima di tutto installiamola:
$ pip install click
Oggi vediamo come usare finestre modali con AngularJS.
In pratica, cliccando su un tasto, vedremo il dettaglio di un record nella finestra modale.
Partiamo quindi dalla tabella che espone i dati:
<table class="table table-bordered table-condensed table-striped">
<thead>
<tr>
<th>Titolo</th>
<th>Autore</th>
<th>Editore</th>
<th></th>
</tr>
</thead>
<tbody>
<tr ng-repeat="book in books| filter:searchText">
<td>{{book.title}}</td>
<td>{{book.author}}</td>
<td>{{book.editor}}</td>
<td>
<button type="button" class="btn btn-sm btn-primary"
ng-click="open(book)">Dettaglio</button>
</td>
</tr>
</tbody>
</table>
Su come prendere i dati potete vedere questo articolo (anche se non usiamo una table in quel caso, ma il concetto è uguale).
Faccio un passo in più, e vediamo come aprire una finestra di dialogo cliccando su un elemento della ListView.
Qui abbiamo visto come riempire una ListView da dati JSON.
Come possiamo vedere, sulla ListView mostriamo solo un campo rispetto a quelli che prendiamo.
Adesso, cliccando su una riga, vogliamo vedere anche gli altri.
Prima di tutto creiamo un altro file QML (detail_dialog.qml) con questo dentro:
import QtQuick 2.0
Item {
id: detailDialog
anchors.fill: parent
PropertyAnimation {
target: detailDialog
property: "opacity"
duration: 400
from: 0
to: 1
easing.type: Easing.InOutQuad
running: true
}
Rectangle {
id: dialogWindow
width: 200
height: 200
radius: 10
border.color: "black"
anchors.centerIn: parent
Text {
anchors.centerIn: parent
text: "AUTORE: " + author + "\nEDITORE: " + editor + "\nPREZZO: " + price + "\nISBN: " + isbn + "\nNOTE: " + note
}
MouseArea{
anchors.fill: parent
onClicked: {
detailDialog.destroy()
}
}
}
}
Adesso dobbiamo intercettare l'evento click sulla riga nella finestra principale.
Abbiamo visto come riempire una ListView in Android usando dati in formato JSON.
Solo che la lista risulta "statica" nel senso che come ci arriva la leggiamo, e non possiamo ordinarla.
Qui vediamo proprio questo: come ordinare una ListView simulando una tabella con righe e colonne.
Partiamo dalla Activity principale:
public class MainActivity extends Activity {
private TextView txtTitolo = null;
private TextView txtCreazione = null;
private ListView listView = null;
private SimpleAdapter adapter = null;
private ArrayList> list = new ArrayList>();@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setLista();
txtTitolo = (TextView) findViewById(R.id.h_titolo);
txtCreazione = (TextView) findViewById(R.id.h_creazione);
txtTitolo.setOnClickListener(new ListSort(list, "titolo", adapter));
txtCreazione.setOnClickListener(new ListSort(list, "creazione", adapter));
}
private void setLista() {
try {
listView = (ListView) findViewById(R.id.lista_articoli);
JSONArray jsonArray = new JSONArray(JsonFile.read(path + "blog_articoli.json"));
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jo = jsonArray.getJSONObject(i);
HashMap map = new HashMap();
map.put("id", jo.getString("id"));
map.put("titolo", jo.getString("titolo"));
map.put("creazione", jo.getString("creazione"));
map.put("modifica", jo.getString("modifica"));
map.put("count", jo.getString("count"));
list.add(map);
}
adapter = new SimpleAdapter(this, list, R.layout.rows,
new String[] { "titolo", "creazione", "modifica", "count" },
new int[] { R.id.titolo, R.id.creazione, R.id.modifica, R.id.count });
listView.setAdapter(adapter);
} catch (JSONException e) {
} catch (Exception e) {
}
}}
Tralascio tutta la parte del recupero dati, partendo che l'abbiate già messa a punto (quella parte non cambia).
In una pagina aspx ho un LinkButton con il quale attivo un evento.
La cosa più "problematica" è che devo passare il valore del LinkButton ad un altro componente.
In questo caso non bastano le solite proprietà Value o Text.
Andiamo con ordine; questo il componente nella pagina:
<asp:LinkButton ID="btn_art_singolo" runat="server" OnCommand="go_Click" CommandName='<%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>'>
<%# DataBinder.Eval(Container.DataItem, "ARTICOLO") %>
</asp:LinkButton>
Il LinkButton sta dentro a un Repeater e prende il valore in maniera dinamica da database.
Tanto per cominciare no avremo un evento OnClick ma u nevento OnCommand.
Le applicazioni Android difficilemente son composte da una sola Activity.
Creare un'Acitivity per ogni compito è la normalità visto anche lo spazio ridotto dei cellulari.
Vediamo come possiamo fare per richiamare un'altra Activity.
Prima di tutto create un altro layout e chiamatelo second; nella cartella layout dovremmo avere second.xml.
Questo sarà il layout della nostra seconda Activity.
Una volta modificato come volete create una nuova classe che estende Activity:
public class SecondActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
}
Poi andate a modificare il file AndroidManifest.xml: