Autore Topic: Problema con passaggio dati ed intent (intent.putExtra)  (Letto 817 volte)

Offline Carontes

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos u8150
Problema con passaggio dati ed intent (intent.putExtra)
« il: 26 Gennaio 2012, 17:14:25 CET »
0
Salve, ho un problema con la visualizzazione di textview in un layout. Ho l'activity principale che è un ExpandableList e per popolarsi preleva dei dati da un file xml che si trova in res/raw. Ho poi una ListView che contiene stringhe e che, tappando su una di esse, dovrebbe aprirmi il layout popolato come se lo aprissi dall'ExpandableList, tutto questo non avviene però. Il layout, aperto dalla ListView, appare solo con le scritte TextView e non con i dati con cui dovrebbe visualizzare correttamente. Mi è stato dato questo suggerimento che però io non ho capito molto bene: "Stai usando la stessa activity di dettaglio partendo da due liste. Però l'activity di dettaglio si aspetta dentro l'intent un oggetto di tipo Child, nell'Activity di ricerca non ce l'hai in quanto il modello dei dati è un array di String.
Forse dovresti caricare i dati dal file xml anche nel caso dell'activity di ricerca in modo da avere degli oggetti Child in entrambi i casi. Il problema è che nell'activity in cui funziona hai come elementi dell'adapter collegato alla expandable list gli oggetti presi dal file xml. Nell'activity di ricerca hai semplici stringhe, quindi quando clicchi su un elemento della lista hai solo la stringa e non tutti i dati per popolare il dettaglio. Quindi o carichi all'inizio tutti i dati dal file xml o carichi i dati che ti servono sul click prima di andare nel dettaglio. "

Activity principale:

Codice (Java): [Seleziona]
public class testactivity extends ExpandableListActivity
{
        ExpandableListAdapter mAdapter;
        private ArrayList<Group> groups;

        @Override
        public void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.list_main);
               
               
                groups = readGroupsFromXml();
                mAdapter = new MyExpandableListAdapter(getLayoutInflater(), groups);
                setListAdapter(mAdapter);
                registerForContextMenu(getExpandableListView());
        }

       
        public ArrayList<Group> readGroupsFromXml()
        {
                try
                {
                        final XmlHandler handler = new XmlHandler();
                        final SAXParser sp = SAXParserFactory.newInstance().newSAXParser();
                        sp.parse(getApplicationContext().getResources().openRawResource(R.raw.data), handler);
                        return handler.getGroups();
                }
                catch (Exception e)
                {
                        Log.e("Error", "xml", e);
                }
                return null;
        }
       
        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
        {
                final Child selectedChild = groups.get(groupPosition).getChildren().get(childPosition);
                final Intent intent = new Intent(this, Details.class);
                intent.putExtra("selectedChild", selectedChild);
                startActivity(intent);
                return true;
        }
}

Activity di dettaglio:

Codice (Java): [Seleziona]
public class Details extends Activity
{
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.last_layout);

               
                final Intent intent = getIntent();
                if (intent.hasExtra("selectedChild"))
                {
                        final Child selectedChild = (Child) intent.getSerializableExtra("selectedChild");
                        if (selectedChild != null)
                        {
                                ((TextView) findViewById(R.id.Title)).setText(selectedChild.getName());
                                ((ImageView) findViewById(R.id.imageView1)).setImageResource(getResources().getIdentifier(selectedChild.getImage(),"drawable", "com.test.com"));
                        }
                }
        }
}

Activity di ricerca:

Codice (Java): [Seleziona]
public class Search extends Activity{


        private ListView lv1;
        private EditText ed;
        private String lv_arr[] = {
                        "America",
                        "Busta",
                        "Cactus",
                        "Fire",
                        "Garden",
                        "Hollywood",
                        "King",
                        "Laboratorio",
                        "Malta",
                        "Nespola",
                        "Pera",
                        "Rosa",
                        "Sapone",
                        "Verano",
        };
       
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.search);
               
                lv1=(ListView)findViewById(R.id.ListView1);
                ed=(EditText)findViewById(R.id.EditText1);
               
                lv1.setClickable(true);
                lv1.setOnItemClickListener(new OnItemClickListener() {
                       
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id){
                                       
                                                        Intent intent = new Intent(Search.this, Details.class);
                                                        startActivity(intent); }
                                {              
                        }});

Cosa dovrei inserire nell'activity di ricerca in modo da visualizzare correttamente il layout una volta cliccato su un item della ListView? Spero possiate aiutarmi perchè sono letteralmente fermo su questo punto da molte settimane. Grazie mille a tutti.