Autore Topic: Come metto un titolo (tipo header) in una listactivity?  (Letto 708 volte)

Offline Enrichman

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    MacOS X 10.7
Come metto un titolo (tipo header) in una listactivity?
« il: 28 Novembre 2011, 09:10:53 CET »
0
La situazione è questa:
ho una prima activity, l'utente seleziona da uno spinner, passo il dato (una stringa) alla seconda activity che si occupa del "grosso".

Questa seconda activity (una listactivity) usa la stringa per connettersi (asynctask) al relativo file xml e lo parsa, fornendo una lista customizzata.
La cosa funziona, vorrei però che l'utente sapesse cosa sta visualizzando, e mettere una topbar che rimane fissa mentre può scorrere la lista.

Ho provato in un po' di modi trovati in giro (non sono troppo esperto con android  ??? ) ma nessuno di essi mi ha aiutato!

Posto un po' di codice per farvi capire meglio!

Il codice della seconda activity
Codice (Java): [Seleziona]
public class SecondActivity extends ListActivity {

        private ArrayList<Lezione> lezioni;
        private HashSet<String> aule;

        public void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.second);

                Bundle bundle = getIntent().getExtras();
                String selezione = bundle.getString("selezione");
               
                lezioni = new ArrayList<Lezione>();            

                if(selezione.equals("Ingegneria")) {
                        new DownloadXmlTask(this).execute("ing");
                } else if //cascata di if else da migliorare
        }


        public class LezioneAdapter extends ArrayAdapter<Lezione> {

                private ArrayList<Lezione> lezioni;

                public LezioneAdapter(Context context, int textViewResourceId, ArrayList<Lezione> lezioni) {
                        super(context, textViewResourceId, lezioni);
                        this.lezioni = lezioni;
                }

                public View getView(int position, View convertView, ViewGroup parent) {
                        View v = convertView;

                        if(v==null) {
                                LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                v = li.inflate(R.layout.row, null);
                        }

                        Lezione l = this.lezioni.get(position);

                        if(l!=null) {

                                String s;
                                TextView orario = (TextView) v.findViewById(R.id.row_orario);
                                s = l.getDataInizioString()+" / "+l.getDataFineString();
                               
                                TextView professore = (TextView) v.findViewById(R.id.row_professore);
                                if(professore != null)
                                        professore.setText(l.getProfessore());

                                TextView nomeLezione = (TextView) v.findViewById(R.id.row_nomeLezione);
                                if(nomeLezione != null)
                                        nomeLezione.setText(l.getNomeLezione());
                        }
                        return v;
                }
        }


        private class DownloadXmlTask extends AsyncTask<String, Void, ArrayList<Lezione>> {

                private ListActivity activity;
                private ProgressDialog dialog;

                public DownloadXmlTask(ListActivity activity) {
                        this.activity = activity;
                        dialog = new ProgressDialog(this.activity);
                }

                protected void onPreExecute() {
                        this.dialog.setMessage("Cerco le lezioni..");
                        this.dialog.show();
                }


                @Override
                protected ArrayList<Lezione> doInBackground(String... params) {
                        try {
                                String s = "http://lezioni_"+params[0]+".xml";
                                URL url = new URL(s);

                                SAXParserFactory spf = SAXParserFactory.newInstance();
                                SAXParser sp = spf.newSAXParser();
                                XMLReader reader = sp.getXMLReader();

                                XMLHandlerLezioni handler = new XMLHandlerLezioni();
                                reader.setContentHandler(handler);
                               
                                URLConnection conn = url.openConnection();
                                conn.setConnectTimeout(5000);
                                conn.setReadTimeout(10000);
                                reader.parse(new InputSource(conn.getInputStream()));
                                lezioni = handler.getParsedData();
                        }
                        catch (Exception e) {
                                Log.e("ERRORE TASK",e.toString());
                        }

                        return lezioni;

                }


                protected void onPostExecute(ArrayList<Lezione> result) {

                        if(dialog.isShowing())
                                dialog.dismiss();

                        if(result!=null) {
                                Toast.makeText(SecondActivity.this, "Lettura completata!", Toast.LENGTH_LONG).show();
                                LezioneAdapter lezioneAdapter = new LezioneAdapter(this.activity, R.layout.row, result);
                                setListAdapter(lezioneAdapter);
                        }
                        else
                                Toast.makeText(SecondActivity.this, "Lettura completata!", Toast.LENGTH_LONG).show();
                }
        }
}

Questo è l'xml della seconda activity
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
           
    <ListView android:id="@android:id/list"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"/>

</LinearLayout>

Offline blaykry

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    w7
Re:Come metto un titolo (tipo header) in una listactivity?
« Risposta #1 il: 28 Novembre 2011, 10:55:11 CET »
0
Ciao, non sono un esperto ma sto provando anch'io qualcosa di simile con le listview, e ho semplicemente usato il metodo setTitle("stringa");

Spero sia quello che ti serve.

Offline ale88sv

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: +1
    • Google+
    • Mostra profilo
    • Le Mie Apps
  • Dispositivo Android:
    Galaxy Nexus
  • Play Store ID:
    ale88sv
  • Sistema operativo:
    Windows 7 / Ubuntu 12.4
Re:Come metto un titolo (tipo header) in una listactivity?
« Risposta #2 il: 28 Novembre 2011, 15:23:03 CET »
0
Se ti basta solo un titolo va bene come ha detto blaykry, se invece hai diverse sezioni ed hai bisogno di diversi titoli, devi crearti un adapter.

Qui c'è il tutorial : [facile] Visualizzare gli oggetti di una ListView in gruppi omogenei con titolo - Android Developers Italia   

Ale

Offline Enrichman

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
  • Sistema operativo:
    MacOS X 10.7
Re:Come metto un titolo (tipo header) in una listactivity?
« Risposta #3 il: 28 Novembre 2011, 19:26:51 CET »
0
Niente, con setTitle non va.
Comunque no, ho bisogno solo del titolo in testa..

Altra cosa, per le righe dovrei sviluppare un layout di questo tipo:



Come posso fare?
Una cosa tipo questa?

Codice (XML): [Seleziona]
<LinearLayout>

    <LinearLayout VERTICAL>
        <TextView>
        </TextView>
        <TextView>
        </TextView>
    </LinearLayout>

    <LinearLayout VERTICAL>

        <LinearLayout>
            <TextView>
            </TextView>
            <TextView>
            </TextView>
        </LinearLayout>

        <TextView>
        </TextView>
        <TextView>
        </TextView>

    </LinearLayout>

</LinearLayout>


Però so che il LinearLayout è supersconsigliato, o almeno farne un uso così massiccio. Consigli?



EDIT: facendolo al volo sembra che così venga (vediamo sull'app come rende), però sono "preoccupato" per le prestazioni. Vi dirò. Intanto aspetto qualche anima pia che mi illumini sul titolo!! :D
« Ultima modifica: 28 Novembre 2011, 19:40:59 CET da Enrichman »