Autore Topic: Associare ad ogni voce figlia della ListView un'activity diversa  (Letto 1039 volte)

Offline dicba

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD
  • Sistema operativo:
    Mac OS X 10.6.8
0
Ciao a tutti sono ancora un novello android. Sto creando questa applicazione con un menu a tendina. Per ogni voce figlia dovrei andare su un'activity diversa. Ad esempio per Porta Nuova- Piazza Castello dovrei ndare su un'activity, per The Romane route su un'altra activity diversa.
Avevo pensato ad un ciclo ma è possibile con java??? Nn riesco a creare più metodi on click per ogni rispettiva voce figlia affinchè riesca ad andare su un'altra activity. Qualcuno ha qualche idea???

Codice (Java): [Seleziona]
package it.sii.android.helloandroid;

import android.app.ExpandableListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
 
public class HelloAndroid extends ExpandableListActivity {
 
    ExpandableListAdapter mAdapter;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set up our adapter
        mAdapter = new MyExpandableListAdapter();
        setListAdapter(mAdapter);
        registerForContextMenu(getExpandableListView());
    }
 
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Menu di esempio");
        menu.add(0, 0, 0, R.string.hello_world);
    }
 
    /**
     * Cosa succede quando premo un elemento di un sotto-menu
     *
     */

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();
 
        String title = ((TextView) info.targetView).getText().toString();
 
        int type = ExpandableListView.getPackedPositionType(info.packedPosition);
        if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
            int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
            Toast.makeText(this, title + ": Figlio " + childPos + " cliccato nel gruppo " + groupPos,
                    Toast.LENGTH_SHORT).show();
            return true;
        } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
            Toast.makeText(this, title + ": Gruppo " + groupPos + " cliccato", Toast.LENGTH_SHORT).show();
            return true;
        }
 
        return false;
    }
 
    /**
     * L'adapter che utilizza un array per mostrare gli elementi principali della lista (groups) e un array di array per rappresentare i sotto-menu (children)
     *
     */

    public class MyExpandableListAdapter extends BaseExpandableListAdapter {
        private String[] groups = { "Historical Routes", "Naturalistic Routes", "Trendy&Shopping Routes", "Cultural Routes" };
        private String[][] children = {
                { "Porta Nuova - Piazza Castello", "The Roman route"},
                { "Superga hill", "Maddalena route"},
                { "From Porta Palazzo to Balon", "Via Roma" },
                { "Savoian age route", "Rinascimental route", "Scientific and industrial route" }
        };
 
        public Object getChild(int groupPosition, int childPosition) {
            return children[groupPosition][childPosition];
        }
 
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }
 
        public int getChildrenCount(int groupPosition) {
            return children[groupPosition].length;
        }
 
        public TextView getGenericView() {
            // Parametri per il Layout ExpandableListView
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, 64);
 
            TextView textView = new TextView(HelloAndroid.this);
            textView.setLayoutParams(lp);
            // Centra il testo verticalmente
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            // Setta la posiione di partenza del testo
            textView.setPadding(36, 0, 0, 0);
           
           
           
            return textView;
        }
 
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getChild(groupPosition, childPosition).toString());
           
            textView.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                        Intent i = new Intent(HelloAndroid.this, NuovaActivity.class);
                                        startActivity(i);
                                       
                                       
                                       
                                }
                               
                               
                               
                        });
           
            return textView;
        }
 
        public Object getGroup(int groupPosition) {
            return groups[groupPosition];
        }
 
        public int getGroupCount() {
            return groups.length;
        }
 
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }
 
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getGroup(groupPosition).toString());
            return textView;
        }
 
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
 
        public boolean hasStableIds() {
            return true;
        }
 
    }
}
« Ultima modifica: 17 Maggio 2013, 12:56:12 CEST da dicba »

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Associare ad ogni voce figlia del menu un'activity diversa (ciclo for???)
« Risposta #1 il: 06 Maggio 2013, 22:50:37 CEST »
0
Partiamo con una domanda che va un po' più alla base. Sei sicuro che serve un'activity diversa per ogni voce?
Da quello che capisco ogni voce dovrebbe portare a una schermata che la mostra nel dettaglio, no?
In questo caso dovresti fare una singola activity, che poi vai a riempire con i dati relativi alla singola voce.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline dicba

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD
  • Sistema operativo:
    Mac OS X 10.6.8
Re:Associare ad ogni voce figlia del menu un\'activity diversa (ciclo for???)
« Risposta #2 il: 17 Maggio 2013, 11:43:18 CEST »
0
Avevo pensato alla creazione di un'activity diversa per ogni voce cliccata della lista perchè una volta entrati in una determinata voce c'è la possibilità di scegliere tre differenti opzioni del menu tra cui:informazioni tecniche, geo localizzazione, e informazioni mobilità. Quindi avevo pensato che fosse necessaria associare ad ogni voce diversa un'activity propria.

Il problema attuale è che con questo metodo (ho messo il pezzo di codice) inserisco la stessa activity per ogni voce diversa, questo non mi va bene. Ad esempio la voce Piazza Castello-Porta Nuova deve contemplare, una volta cliccata la voce, un' activity in cui c'è un menu che ti permette di fare diverse azioni (quelle sopra indicate) relative a quel determinato percorso. Ora però se scelgo un altro percorso mi riporta alla stessa activity di piazza Castello Porta Nuova, questo immagino perchè inserisco una sola  activity nuova. Quale potrebbe essere il metodo che ad ogni singola voce mi porti ad un'activity differente?????
Spero di essere stato comprensibile, grazie per la disponibilità!!!

Codice (Java): [Seleziona]
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getChild(groupPosition, childPosition).toString());
           
            textView.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                       
                                       
                                        Intent i = new Intent(HelloAndroid.this, NuovaActivity.class);
                                        startActivity(i);
                                       
                                       
                                       
                                }

Post unito: 17 Maggio 2013, 12:55:07 CEST
potrei utilizzare il metodo onClickListView ?? oppure inserire delle iterazioni if else??
« Ultima modifica: 17 Maggio 2013, 12:55:07 CEST da dicba, Reason: Merged DoublePost »

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Associare ad ogni voce figlia della ListView un'activity diversa
« Risposta #3 il: 17 Maggio 2013, 15:16:42 CEST »
0
Quello che devi fare non é creare tante activity, tutte della stessa natura.
Ne crei una e poi la modifichi a seconda di ciò che ti interessa visualizzare. Ovviamente l'activity deve sapere cosa é stato cliccato, e questo glielo dici passando dati con questo metodo.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline dicba

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD
  • Sistema operativo:
    Mac OS X 10.6.8
Re:Associare ad ogni voce figlia della ListView un'activity diversa
« Risposta #4 il: 19 Maggio 2013, 19:01:38 CEST »
0
grazie per i contributi e per il metodo suggeritomi ma sono ancora alle prime armi e sto imparando i codici da poco tempo.
L'activity che voglio creare per ogni voce della lista è un'activity che contiene tre foto (questi saranno i dati da passare più una stringa indicherà il nome del percorso) differenti per ogni voce e un menu unico costituito da info e geo-localizzazione. In questo caso ho fatto in questa maniera senza particolare successo perchè l'applicazione mi si stoppa.
Codice (Java): [Seleziona]
public class HelloAndroid extends ExpandableListActivity {
        public ImageView imageView1;
          public ImageView imageView2;
       public ImageView imageView3;
      Intent intent;
      Intent intent1;
    ExpandableListAdapter mAdapter;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set up our adapter
        mAdapter = new MyExpandableListAdapter();
        setListAdapter(mAdapter);
        registerForContextMenu(getExpandableListView());
       
        // quello che ho creato secondo il tutorial rispetto ai dati da passare
       
        String s="Percorso Porta Nuova Porta Palazzo";
     
        intent=new Intent(getApplicationContext(), NuovaActivity.class);
       
        String pkg=getPackageName();
       
        intent.putExtra(pkg+".myString", s);
       
        String t="The Roman Route";
      intent1=new Intent(getApplicationContext(), NuovaActivity.class);
       
        String pkg1=getPackageName();
       
        intent.putExtra(pkg1+".myString", t);
       
       
    }
 public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getChild(groupPosition, childPosition).toString());
           
            textView.setOnClickListener(new OnClickListener() {
                               
                                @Override
                                public void onClick(View v) {
                                       
                                       
                                       
                                        startActivity(intent);
                                    startActivity(intent1);
                                       
                                       
                                }
 


Codice (Java): [Seleziona]
public class NuovaActivity extends Activity {
        public ImageView imageView1;
          public ImageView imageView2;
       public ImageView imageView3;
        private RelativeLayout layout;
       
       
        public void onCreate(Bundle savedInstanceState){
                 RelativeLayout layout = new RelativeLayout(this);
                 layout.setBackgroundColor(Color.LTGRAY);
                 
                 
                 // quello che ho aggiunto secnodo il tutorial
                 Intent intent=getIntent();
                 String pkg=getPackageName();
                       
                        String s=intent.getStringExtra(pkg+".myString");
                        TextView tv=(TextView)findViewById(R.id.testo);
                        tv.append("myString:"+s+"\n"); //visualizziamo i dati
                 


                        setContentView(R.layout.activity_nuova);
                super.onCreate(savedInstanceState);
        }
        }



questo è il logcat che mi appare quando avvio l'applicazione

Codice (Java): [Seleziona]
05-19 18:55:18.063: D/dalvikvm(703): Not late-enabling CheckJNI (already on)
05-19 18:55:18.783: E/Trace(703): error opening trace file: No such file or directory (2)
05-19 18:55:19.264: D/dalvikvm(703): GC_CONCURRENT freed 52K, 3% free 8377K/8583K, paused 19ms+4ms, total 99ms
05-19 18:55:19.424: D/(703): HostConnection::get() New Host Connection established 0x2a0d62b8, tid 703
05-19 18:55:33.523: D/AndroidRuntime(703): Shutting down VM
05-19 18:55:33.534: W/dalvikvm(703): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
05-19 18:55:33.553: E/AndroidRuntime(703): FATAL EXCEPTION: main
05-19 18:55:33.553: E/AndroidRuntime(703): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.sii.android.helloandroid/it.sii.android.helloandroid.NuovaActivity}: java.lang.NullPointerException
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.os.Handler.dispatchMessage(Handler.java:99)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.os.Looper.loop(Looper.java:137)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.ActivityThread.main(ActivityThread.java:4745)
05-19 18:55:33.553: E/AndroidRuntime(703):      at java.lang.reflect.Method.invokeNative(Native Method)
05-19 18:55:33.553: E/AndroidRuntime(703):      at java.lang.reflect.Method.invoke(Method.java:511)
05-19 18:55:33.553: E/AndroidRuntime(703):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-19 18:55:33.553: E/AndroidRuntime(703):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-19 18:55:33.553: E/AndroidRuntime(703):      at dalvik.system.NativeStart.main(Native Method)
05-19 18:55:33.553: E/AndroidRuntime(703): Caused by: java.lang.NullPointerException
05-19 18:55:33.553: E/AndroidRuntime(703):      at it.sii.android.helloandroid.NuovaActivity.onCreate(NuovaActivity.java:91)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.Activity.performCreate(Activity.java:5008)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-19 18:55:33.553: E/AndroidRuntime(703):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-19 18:55:33.553: E/AndroidRuntime(703):      ... 11 more
05-19 18:55:41.504: E/Trace(723): error opening trace file: No such file or directory (2)
05-19 18:55:42.003: D/dalvikvm(723): GC_CONCURRENT freed 56K, 3% free 8377K/8583K, paused 32ms+4ms, total 100ms
05-19 18:55:42.214: D/(723): HostConnection::get() New Host Connection established 0x2a0d9de8, tid 723
05-19 18:55:45.743: D/AndroidRuntime(723): Shutting down VM
05-19 18:55:45.743: W/dalvikvm(723): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
05-19 18:55:45.773: E/AndroidRuntime(723): FATAL EXCEPTION: main
05-19 18:55:45.773: E/AndroidRuntime(723): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.sii.android.helloandroid/it.sii.android.helloandroid.NuovaActivity}: java.lang.NullPointerException
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.os.Handler.dispatchMessage(Handler.java:99)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.os.Looper.loop(Looper.java:137)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.ActivityThread.main(ActivityThread.java:4745)
05-19 18:55:45.773: E/AndroidRuntime(723):      at java.lang.reflect.Method.invokeNative(Native Method)
05-19 18:55:45.773: E/AndroidRuntime(723):      at java.lang.reflect.Method.invoke(Method.java:511)
05-19 18:55:45.773: E/AndroidRuntime(723):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-19 18:55:45.773: E/AndroidRuntime(723):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-19 18:55:45.773: E/AndroidRuntime(723):      at dalvik.system.NativeStart.main(Native Method)
05-19 18:55:45.773: E/AndroidRuntime(723): Caused by: java.lang.NullPointerException
05-19 18:55:45.773: E/AndroidRuntime(723):      at it.sii.android.helloandroid.NuovaActivity.onCreate(NuovaActivity.java:91)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.Activity.performCreate(Activity.java:5008)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-19 18:55:45.773: E/AndroidRuntime(723):      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-19 18:55:45.773: E/AndroidRuntime(723):      ... 11 more
« Ultima modifica: 19 Maggio 2013, 19:06:30 CEST da dicba »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Associare ad ogni voce figlia della ListView un'activity diversa
« Risposta #5 il: 20 Maggio 2013, 09:16:09 CEST »
+1
Citazione
05-19 18:55:33.553: E/AndroidRuntime(703): Caused by: java.lang.NullPointerException
05-19 18:55:33.553: E/AndroidRuntime(703):      at it.sii.android.helloandroid.NuovaActivity.onCreate(NuovaActivity.java:91)

Alla riga 91 di NuovaActivity.java c'è qualcosa NULL che non dovrebbe essere NULL.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline DarnellNajanReed

  • Utente normale
  • ***
  • Post: 359
  • Respect: +49
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus One, Acer Iconia A500/501, Asus Transformer Prime, Galaxy ACE, Galaxy S Plus, Galaxy S Advance P, Galaxy Tab 2 7.0, Google Nexus 7
  • Play Store ID:
    Luigi Notaro
  • Sistema operativo:
    OS X 10.8.3
Re:Associare ad ogni voce figlia della ListView un'activity diversa
« Risposta #6 il: 20 Maggio 2013, 14:33:01 CEST »
0
Attenzione a chiamare la super.onCreate() sempre come prima istruzione nell'overridare l'onCreate!