Autore Topic: Passaggio da un'activity ad un'altra/ListActivity  (Letto 1021 volte)

Offline ms92ita

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Passaggio da un'activity ad un'altra/ListActivity
« il: 13 Giugno 2011, 15:50:00 CEST »
0
Salve ragazzi, avrei un problema.
Sto finendo di costruire un'applicazione per gli esami e nella schermata principale (IMMAGINE DA EMULATORE ===> http://img843.imageshack.us/img843/3159/immaginebka.jpg) tramite il menu opzioni vorrei che l'utente utilizzi un'opzione dell'applicazione... Il problema è che per qualsiasi opzione che vorrei scegliere, mi da sempre la stessa schermata, cioè la prima
Vi passo il codice della schermata principale:
Codice (Java): [Seleziona]
public class PaginaPrincipale extends Activity {
        public void onCreate(Bundle bun) {
                super.onCreate(bun);
                setContentView(R.layout.main);
        }
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                boolean supRetVal = super.onCreateOptionsMenu(menu);
                CharSequence c="Opzioni";
                menu.add(c);
                c = "Ricerca amici";
                menu.add(c);
                c="Collegamento database";
                menu.add(c);
                c="Visualizzazione mappa per il ritrovo";
                menu.add(c);
                c="Invio Sms";
                menu.add(c);
                c="Proprie coordinate";
                menu.add(c);
                c="Esci";
                menu.add(c);
                return supRetVal;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                Intent i;
                switch (item.getItemId()) {
                case 0:
                        i=new Intent(this, Opzioni.class);
                        startActivity(i);
                        break;
                case 1:
                        i=new Intent(this, CercaAmiciMappa.class);
                        startActivity(i);
                        break;
                case 2:
                        if(ParametriUtili.miaLat.equals(null) || ParametriUtili.suaLat.equals(null) || ParametriUtili.miaLong.equals(null) || ParametriUtili.suaLong.equals(null)) {
                                Toast.makeText(this, "Devi prima rilevare i parametri gps tuoi e dell'amico", 3000).show();
                        }
                        else {
                                Intent in=new Intent(getApplicationContext(),SelezioneTipo.class);
                                this.startActivity(in);
                        }
                        break;
                case 3:
                        if(!ParametriUtili.luogo) {
                                Toast.makeText(this, "Devi prima trovare un accordo con un amico", 3000).show();
                        }
                        else {
                                if(ParametriUtili.luogo || ParametriUtili.accordoFatto || ParametriUtili.miaLat.equals(null) || ParametriUtili.suaLat.equals(null) ||
                                        ParametriUtili.suaLong.equals(null) || ParametriUtili.miaLong.equals(null) || ParametriUtili.luogoRit==null) {
                                        Toast.makeText(this, "Devi prima settare i parametri di navigazione", 3000).show();
                                }
                                else {
                                        //guarda rotta per luogo di ritrovo
                                        Intent in=new Intent(this,MappaRitrovo.class);
                                        this.startActivity(in);
                                        onStop();
                                }
                        }
                        break;
                case 4:
                        i=new Intent(this, SMS.class);
                        startActivity(i);
                        break;
                case 5:
                        i=new Intent(this, CoordProp.class);
                        startActivity(i);
                        break;
                case 6:
                        onStop();
                        break;
                }
                return true;
        }
}

Il manifest:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="appfinale.principale"
     android:versionCode="1"
     android:versionName="1.0">
      <uses-permission android:name="android.permission.READ_SMS"/>
      <uses-permission android:name="android.permission.SEND_SMS"/>
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
      <uses-permission android:name="android.permission.READ_CONTACTS"/>
      <uses-permission android:name="android.permission.INTERNET"/>
    <application android:icon="@drawable/icon" android:label="@string/app_name">
   
    <uses-sdk android:minSdkVersion="8" />
   
    <uses-library android:name="com.google.android.maps"/>
   
        <activity android:name=".PaginaPrincipale" android:label="@string/titolo_principale">
                <intent-filter>
                        <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
        </activity>
       
        <activity android:name=".Opzioni" android:label="@string/titolo_opzioni">
        </activity>
       
        <activity android:name=".SelezioneLuogo" android:label="@string/titolo_mysql">
        </activity>
       
        <activity android:name=".SelezioneTipo" android:label="@string/titolo_mysql">
        </activity>
       
        <activity android:name=".SMS" android:label="@string/titolo_sms">
        </activity>
       
        <receiver android:name=".RicettoreSMS">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
       
        <activity android:name=".CoordProp" android:label="@string/titolo_rileva">
        </activity>
       
        <activity android:name=".MappaRitrovo" android:label="@string/titolo_ritrovo">
        </activity>
       
        <activity android:name=".CercaAmici" android:label="@string/titolo_ricerca">
        </activity>
       
        <activity android:name=".CercaAmiciMappa" android:label="@string/titolo_ricerca">
        </activity>
       
        <activity android:name=".VisualeLuogoTemp" android:label="@string/titolo_luogo">
        </activity>
       
    </application>
</manifest>

La scelta per l'utente dovrebbe filare liscia come l'olio, invece va sempre sulla prima scelta  o_O
Non è che sarebbe meglio che cambio lo switch con un semplice if quando controllo la scelta, oppure non cambia proprio nulla????
Servono aiuti  :D


P.S. Risolto il problema modificando gli add, ci ho messo un po' a capirlo xD, ora però resta un altro problema(è solo in un'activity):

Codice sorgente:
Codice (Java): [Seleziona]
package appfinale.principale;

import java.text.DecimalFormat;
import java.util.*;
import java.util.regex.*;

import android.app.*;
import android.content.*;
import android.database.Cursor;
import android.location.*;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.*;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class CercaAmici extends ListActivity {
       
        static final int primo=Menu.FIRST;
        static final int secondo=Menu.FIRST+1;
        static final int terzo=Menu.FIRST+2;
        static final int quarto=Menu.FIRST+3;
        static final int quinto=Menu.FIRST+4;
        static final int sesto=Menu.FIRST+5;
        static final int settimo=Menu.FIRST+6;

        protected static final String posizioneCambiata = new String(
                        "android.intent.action.LOCATION_CHANGED");
        protected LocationManager managerPosizioni = null;
        protected Location posizione = null;
        protected boolean aggiorna = true;
        protected RicettoreEventi ricettore = null;
        protected final IntentFilter filtro = new IntentFilter(
                        posizioneCambiata);
        protected final long distanzaMinimaAgg = ParametriUtili.aggPos;
        protected final long tempoMinimo = ParametriUtili.tempoAgg;
        protected static final int distanzaMaxAmico = (int) ParametriUtili.distanzaMax;
        protected ArrayList<Amico> amici = new ArrayList<Amico>();

        class RicettoreEventi extends BroadcastReceiver {
                @Override
                public void onReceive(Context context, Intent intent) {
                        if (aggiorna)
                                aggiornaLista();
                }
        }

        @Override
        public void onCreate(Bundle icicle) {
                super.onCreate(icicle);
                managerPosizioni = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                aggiornaListaAmici();
                aggiornaLista();
                autoRefreshGPS();
        }

        @Override
        public void onResume() {
                super.onResume();
                aggiorna = true;
                registerReceiver(ricettore, filtro);
        }

        private void autoRefreshGPS() {
                List<String> providers = managerPosizioni.getProviders(true);
                LocationProvider provider = managerPosizioni
                                .getProvider(providers.get(0));
                managerPosizioni.requestLocationUpdates(provider.getName(),
                                tempoMinimo, distanzaMinimaAgg,
                                createPendingResult(0, getIntent(),
                                                PendingIntent.FLAG_NO_CREATE));
                ricettore = new RicettoreEventi();
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                boolean supRetVal = super.onCreateOptionsMenu(menu);
                menu.add(0, primo, 0, getString(R.string.main_menu_open_map));
                menu.add(0, secondo, 0, "Opzioni");
                menu.add(0, terzo, 0, "Collegamento database");
                menu.add(0, quarto, 0, "Visualizzazione mappa per il ritrovo");
                menu.add(0, quinto, 0, "Invio Sms");
                menu.add(0, sesto, 0, "Proprie coordinate");
                menu.add(0, settimo, 0, "Esci nel menu principale");
                return supRetVal;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                Intent i;
                switch (item.getItemId()) {
                case primo:
                        i=new Intent(this, CercaAmiciMappa.class);
                        startActivity(i);
                        break;
                case secondo:
                        i=new Intent(this, Opzioni.class);
                        startActivity(i);
                        break;
                case terzo:
                        if(ParametriUtili.miaLat.equals(null) && ParametriUtili.suaLat.equals(null) && ParametriUtili.miaLong.equals(null) && ParametriUtili.suaLong.equals(null)) {
                                Toast.makeText(this, "Devi prima rilevare i parametri gps tuoi e dell'amico", 3000).show();
                        }
                        else {
                                Intent in=new Intent(this,SelezioneTipo.class);
                                this.startActivity(in);
                        }
                        break;
                case quarto:
                        if(!ParametriUtili.luogo) {
                        Toast.makeText(this, "Devi prima trovare un accordo con un amico", 3000).show();
                }
                else {
                        if(ParametriUtili.luogo || ParametriUtili.accordoFatto || ParametriUtili.miaLat.equals(null) || ParametriUtili.suaLat.equals(null) ||
                                ParametriUtili.suaLong.equals(null) || ParametriUtili.miaLong.equals(null) || ParametriUtili.luogoRit==null) {
                                Toast.makeText(this, "Devi prima settare i parametri di navigazione", 3000).show();
                        }
                        else {
                                //guarda rotta per luogo di ritrovo
                                Intent in=new Intent(this,MappaRitrovo.class);
                                this.startActivity(in);
                        }
                }
                        break;
                case quinto:
                        i=new Intent(this, SMS.class);
                        startActivity(i);
                        break;
                case sesto:
                        i=new Intent(this, CoordProp.class);
                        startActivity(i);
                        break;
                case settimo:
                        i=new Intent(this, PaginaPrincipale.class);
                        startActivity(i);
                        break;
                }
                return true;
        }

        private void aggiornaListaAmici() {
                Cursor c = getContentResolver().query(
                                ContactsContract.Contacts.CONTENT_URI, null, null,
                                null, ContactsContract.Contacts.DISPLAY_NAME + " ASC");
                startManagingCursor(c);
                int noteInd = c.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE);
                int nomeInd = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                if (c.moveToFirst()) {
                        do {
                                String noteStr = c.getString(noteInd);
                                Location posAmico = null;
                                if (noteStr != null) {
                                        final String geoPattern = "(geo:[\\-]?[0-9]{1,3}\\.[0-9]{1,6}\\,[\\-]?[0-9]{1,3}\\.[0-9]{1,6}\\#)";
                                        Pattern pattern = Pattern.compile(geoPattern);
                                        CharSequence inputStr = noteStr;
                                        Matcher matcher = pattern.matcher(inputStr);
                                        boolean matchFound = matcher.find();
                                        if (matchFound) {
                                                String groupStr = matcher.group(0);
                                                posAmico = new Location("");
                                                String latid = groupStr.substring(
                                                                groupStr.indexOf(":") + 1,
                                                                groupStr.indexOf(","));
                                                String longit = groupStr.substring(
                                                                groupStr.indexOf(",") + 1,
                                                                groupStr.indexOf("#"));
                                                posAmico.setLongitude(Float.parseFloat(longit));
                                                posAmico.setLatitude(Float.parseFloat(latid));
                                        }
                                }
                                String nomeAmico = c.getString(nomeInd);
                                amici.add(new Amico(posAmico, nomeAmico));
                        } while (c.moveToNext());
                }
        }

        private void aggiornaLista() {
                posizione = managerPosizioni.getLastKnownLocation(managerPosizioni.getProviders(true).get(0));
                ArrayList<String> listItems = new ArrayList<String>();
                for (Amico amicoVicino : amici) {
                        String curLine = new String(getString(R.string.main_list_format));
                        curLine = curLine.replace("$name", amicoVicino.nome);
                        if (amicoVicino.location != null) {
                                if (posizione.distanceTo(amicoVicino.location) < distanzaMaxAmico) {
                                        final DecimalFormat df = new DecimalFormat("####0.000");
                                        String formattedDistance = df.format(posizione
                                                        .distanceTo(amicoVicino.location) / 1000);
                                        curLine = curLine.replace("$distance", formattedDistance);
                                }
                        } else {
                                curLine = curLine.replace("$distance",
                                                getString(R.string.main_list_geo_not_set));
                        }
                        listItems.add(curLine);
                }
                ArrayAdapter<String> notes = new ArrayAdapter<String>(this,
                                android.R.layout.simple_list_item_1, listItems);
                long beforeIndex = 0;
                if (getListAdapter() != null)
                        beforeIndex = this.getSelectedItemId();
                setListAdapter(notes);
                try {
                        this.setSelection((int) beforeIndex);
                } catch (Exception e) {
                }
        }
       
        @Override
        public void onStop() {
                super.onStop();
                finish();
        }
}

Allora, cercando di inizializzare questa activity dal menu di prima, mi da un errore di runtime (debuggando su eclipse).. Questo mi da errore perchè la classe estende una ListActivity???
« Ultima modifica: 13 Giugno 2011, 18:34:39 CEST da ms92ita »

Offline sgotenks

  • Utente junior
  • **
  • Post: 57
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Geeksphone zero
  • Sistema operativo:
    Windows
Re:Passaggio da un'activity ad un'altra/ListActivity
« Risposta #1 il: 14 Giugno 2011, 18:25:10 CEST »
0
Si ma qual'è l'errore? A che linea del codice? Cmq perchè estendi listActivity, questa va usata solo quando hai una list view al suo interno e basta se non erro.........ovvero hanno un layout di default con solo una listview, non ce ne puoi metter uno tuo........

Offline ms92ita

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Passaggio da un'activity ad un'altra/ListActivity
« Risposta #2 il: 14 Giugno 2011, 18:30:34 CEST »
0
Mi da questo ===> http://img638.imageshack.us/img638/5285/immaginecdc.jpg

P.S. visto che non riuscivo a fare copia-incolla ho direttamente fatto lo screen

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline ms92ita

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Re:Passaggio da un'activity ad un'altra/ListActivity
« Risposta #4 il: 15 Giugno 2011, 13:09:33 CEST »
0
Guardando mi da "Unable to start Activity" perchè l'intent è nullo... Eppure l'intent è praticamente uguale a tutte le altre chiamate alla startActivity, ed ho sistemato la ListActivity aggiungendo la ListView  o_O

P.S. Risolto  :D in pratica quando ultilizzava il metodo requestLocationUpdates avevo il pending intent praticamente inesistente quindi dava errore... adesso l'ho cambiato con un locationlistener e non da + errori  8-) ultima domanda... visto che mi trovo molto meglio ad utilizzare il logcat da prompt dei comandi (perchè riesco a leggere comppletamente gli errori), c'è un modo per poter "cancellare" la schermata da prompt??? In pratica togliere la storia del logcat  :-)
« Ultima modifica: 15 Giugno 2011, 13:56:14 CEST da ms92ita »