Autore Topic: Copia negli appunti  (Letto 1282 volte)

Offline snippox

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Copia negli appunti
« il: 09 Settembre 2011, 13:52:38 CEST »
0
Salve ho una list view e vorrei che quando l'utente clicchi su un elemento della list view il contenuto del campo venga copiato negli appunti e possa essere incollato da un'altra parte. come posso fare?? grz 1000

Offline andbin

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: +1
    • Mostra profilo
    • www.andbin.net
Re:Copia negli appunti
« Risposta #1 il: 09 Settembre 2011, 14:32:32 CEST »
0
Salve ho una list view e vorrei che quando l'utente clicchi su un elemento della list view il contenuto del campo venga copiato negli appunti e possa essere incollato da un'altra parte. come posso fare?? grz 1000
Innanzitutto bisognerebbe vedere di quale "contenuto" parli (testo?).
Comunque dalla API Level 11 (>= Android 3) c'è la classe android.content.ClipboardManager e per versioni precedenti c'è la classe android.text.ClipboardManager.

Alla fin fine qualcosa del tipo (all'interno di una Activity):

Codice: [Seleziona]
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
cm.setText("blabla");
Andrea, SCJP 5 (91%) – SCWCD 5 (94%)
www.andbin.net

Offline snippox

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Copia negli appunti
« Risposta #2 il: 09 Settembre 2011, 15:08:53 CEST »
0
Grazie mille funziona...ho un altro favore da chiederti. Io ho un file xml da cui prendo gli elementi per la mia listview solo che vorrei una cosa di questo tipo:

ogni campo della ListView dovrebbe avere ad esempio: NomeRadio - link
Ora quando vado a copiare, se faccio come hai detto tu io copio tutto, mentre a me servirebbe copiare solo link. Come posso fare? la funzione che fa il parser e che genera la listView è la seguente:

Codice (Java): [Seleziona]
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.classifica);
       
        //Classifica cl = new Classifica();
        String xmlUrl="http://fantateam2010.altervista.org/myfiles/message.xml";
        MyParser parser=new MyParser(); //otteniamo un istanza del nostro parser
        parser.parseXml(xmlUrl);//usiamo il parser
       
        ListAdapter adapter = new ArrayAdapter<esame.radio.Classifica>(
                        this,
                        android.R.layout.simple_list_item_1,
                        parser.parsedData
        );
        setListAdapter(adapter);
               
       
        Log.d(TAG, parser.parsedData.toString());
       
       
       
       
    }

Offline andbin

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: +1
    • Mostra profilo
    • www.andbin.net
Re:Copia negli appunti
« Risposta #3 il: 09 Settembre 2011, 15:50:05 CEST »
0
ogni campo della ListView dovrebbe avere ad esempio: NomeRadio - link
Ora quando vado a copiare, se faccio come hai detto tu io copio tutto, mentre a me servirebbe copiare solo link. Come posso fare?
Hai usato direttamente un ArrayAdapter (cioè non hai fatto un tuo adapter specifico estendendo ArrayAdapter).
ArrayAdapter "di serie" fa una cosa molto semplice per visualizzare ogni elemento: prende la stringa dal toString() dell'oggetto xyz (qualunque tipo sia) oppure direttamente l'oggetto stesso se è un CharSequence (una implementazione di).

Quando fai click, l'indice lo hai di certo, quindi ricavi l'oggetto esame.radio.Classifica a quel indice e poi dovresti invocare "qualcosa" (es. getLink() se esistesse) su questo oggetto. Insomma, il punto è cosa offre questo tipo Classifica, che non so cosa sia ... è una cosa o tua o fatta da altri.
Se Classifica non offre un modo per ottenere il link a sè stante, il problema è innanzitutto questo.
« Ultima modifica: 09 Settembre 2011, 15:52:26 CEST da andbin »
Andrea, SCJP 5 (91%) – SCWCD 5 (94%)
www.andbin.net

Offline snippox

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Copia negli appunti
« Risposta #4 il: 09 Settembre 2011, 16:29:16 CEST »
0
Classifica l'ho creato io così:

Codice (Java): [Seleziona]
package esame.radio;


public class Classifica {
        /**
                 * @uml.property  name="body"
                 */

        private String body;
        /**
                 * @uml.property  name="heading"
                 */

        private String heading;
        /**
                 * @uml.property  name="from"
                 */

        private String from;
        /**
                 * @uml.property  name="to"
                 */

        private String to;
        /**
                 * @uml.property  name="id"
                 */

        private String id;
       
        /**
                 * @return
                 * @uml.property  name="id"
                 */

        public String getId() {
                return id;
        }

        /**
                 * @param id
                 * @uml.property  name="id"
                 */

        public void setId(String id) {
                this.id = id;
        }

        /**
                 * @return
                 * @uml.property  name="from"
                 */

        public String getFrom() {
                return from;
        }

        /**
                 * @param from
                 * @uml.property  name="from"
                 */

        public void setFrom(String from) {
                this.from = from;
        }

        /**
                 * @return
                 * @uml.property  name="to"
                 */

        public String getTo() {
                return to;
        }

        /**
                 * @param to
                 * @uml.property  name="to"
                 */

        public void setTo(String to) {
                this.to = to;
        }

        /**
                 * @return
                 * @uml.property  name="heading"
                 */

        public String getHeading() {
                return heading;
        }

        /**
                 * @param heading
                 * @uml.property  name="heading"
                 */

        public void setHeading(String heading) {
                this.heading = heading;
        }
       

        /**
                 * @return
                 * @uml.property  name="body"
                 */

        public String getBody() {
                return body;
        }

        /**
                 * @param body
                 * @uml.property  name="body"
                 */

        public void setBody(String body) {
                this.body = body;
        }

        @Override
        public String toString() {
                return  to + "\n";
        }
       
               
}

Se vedi io ho fatto un Override di To string per farmi stampare solo l'id. Ma io vorrei sia il campo id che il campo From. Però se faccio :

Codice (Java): [Seleziona]
@Override
        public String toString() {
                return  from + " - " +  to + "\n"; // stampa Radio Prova - http://82.23...
        }

quando effettua il copy negli appunti mi prende sia from che to mentre a me interessa solo il to. :) Spero di aver reso l'idea

Offline andbin

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: +1
    • Mostra profilo
    • www.andbin.net
Re:Copia negli appunti
« Risposta #5 il: 09 Settembre 2011, 16:39:36 CEST »
0
quando effettua il copy negli appunti mi prende sia from che to mentre a me interessa solo il to. :) Spero di aver reso l'idea
Premesso (e non vuol essere una critica negativa) che a livello perlomeno concettuale per una "Classifica" avere proprietà di nome "to", "from" di per sé direbbero (almeno a me) ben poco.

Io ho anche guardato il XML a quel URL .... sì, ci sono dei <to> ma solo uno vedo che ha un URL http://blabla...., gli altri sono dei nomi.

E comunque la tua classe ha un getTo() ... quindi al click sulla lista: a) hai l'indice, b) prendi l'oggetto Classifica all'indice, c) ottieni quello che tu chiami link invocandoci getTo().

Tutto qui.
Andrea, SCJP 5 (91%) – SCWCD 5 (94%)
www.andbin.net

Offline snippox

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Copia negli appunti
« Risposta #6 il: 09 Settembre 2011, 17:26:31 CEST »
0

E comunque la tua classe ha un getTo() ... quindi al click sulla lista: a) hai l'indice, b) prendi l'oggetto Classifica all'indice, c) ottieni quello che tu chiami link invocandoci getTo().



Se non ti dispiace come dovrei fare questo passaggio? Perchè io faccio così ma penso sia sbagliato perchè nn riesco ad accedere al campo:

Codice (Java): [Seleziona]
protected void onListItemClick(ListView l, View v, int position, long id) {
                super.onListItemClick(l, v, position, id);
                Object o = this.getListAdapter().getItem(position);
                String radio = o.toString();
                       
                ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
                cm.setText(radio);
               
       
                Toast.makeText(this, "E' stata salvata la radio: " + " " + radio +" "+ "negli appunti!", Toast.LENGTH_LONG).show();
                }
   
}

Offline andbin

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: +1
    • Mostra profilo
    • www.andbin.net
Re:Copia negli appunti
« Risposta #7 il: 09 Settembre 2011, 17:48:15 CEST »
+1
Se non ti dispiace come dovrei fare questo passaggio? Perchè io faccio così ma penso sia sbagliato perchè nn riesco ad accedere al campo:
Indubbiamente hai esteso ListActivity (si evince dai metodi usati). Non è un problema, cioè va bene.
C'è solo un punto che complica la cosa: il fatto che il getListAdapter() di ListActivity ha come tipo di ritorno il tipo più "astratto" che è ListAdapter, non il tuo ArrayAdapter "tipizzato" con i generics.

Hai 2 possibilità:

1) getListAdapter().getItem(position) restituisce un oggetto che tu "sai" che è un Classifica (non può essere diversamente, per come hai tipizzato il ArrayAdapter), quindi basta fare un cast del reference a Classifica:

Codice: [Seleziona]
Classifica classif = (Classifica) this.getListAdapter().getItem(position);
   // qui puoi usare getTo() su classif !!

2) Tenere tra le variabili di istanza il tuo ArrayAdapter tipizzato così come è:

Codice: [Seleziona]
private ArrayAdapter<esame.radio.Classifica> adapter;

.....
    adapter = new ArrayAdapter<esame.radio.Classifica>( .......... );
    setListAdapter(adapter);
E poi nel tuo onListItemClick semplicemente usi il adapter dalla variabile di istanza (e non lo prendi da getListAdapter!!) perché così è già "tipizzato":

Codice: [Seleziona]
Classifica classif = adapter.getItem(position);
NOTA: tra le due opzioni è più "pulita" la seconda, perché non fai alcun cast esplicito E sfrutti come si deve i generics .
« Ultima modifica: 09 Settembre 2011, 20:35:11 CEST da andbin »
Andrea, SCJP 5 (91%) – SCWCD 5 (94%)
www.andbin.net