Autore Topic: Dubbio su passaggio ad altra activity  (Letto 495 volte)

Offline GNex4

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4, Galaxy Nexus, Nexus 7
  • Sistema operativo:
    Mac OS X, Windows 8
Dubbio su passaggio ad altra activity
« il: 24 Settembre 2013, 12:48:41 CEST »
0
Salve, sulla mia main activity vorrei selezionare tramite uno spinner e un datapicker delle altre activity es.
dallo spinner (generi musicali) seleziono una voce esempio (rock) l'utente deve essere mandato sull'activity lista canzoni rock (list view dove prendo dei dati da db mysql esterno). Mentre col datapicker si seleziona l'anno (della canzone) e l'utente viene mandato su un altra list view delle canzoni prese sempre da db mysql in base all'anno...qualcuno può aiutarmi?
questa è la main activity:

Codice: [Seleziona]
package //;

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

public class MainActivity extends Activity {
       
           protected TextView mDateDisplay;
            protected Button mPickDate;
            protected int mYear;
            protected int mMonth;
            protected int mDay;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
               
                 mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
                mPickDate = (Button) findViewById(R.id.pickDate);

                mPickDate.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        showDialog(0);
                    }
                });

                final Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);

                updateDisplay();   
            }
           
            protected void updateDisplay() {
                mDateDisplay.setText(
                    new StringBuilder()
                            .append(mMonth + 1).append("-")
                            .append(mDay).append("-")
                            .append(mYear).append(" "));
            }

            protected DatePickerDialog.OnDateSetListener mDateSetListener =
                new DatePickerDialog.OnDateSetListener() {
                    public void onDateSet(DatePicker view, int year,
                                          int monthOfYear, int dayOfMonth) {
                        mYear = year;
                        mMonth = monthOfYear;
                        mDay = dayOfMonth;
                        updateDisplay();
                    }
            };

            protected Dialog onCreateDialog(int id) {
                    return new DatePickerDialog(this,
                                mDateSetListener,
                                mYear, mMonth, mDay);
            }
       
        // qua dovrebbe essere inserito il codice riguardante lo spinner?
       
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

}

questo lo style:
Codice: [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/benvenuto" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/home" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignLeft="@+id/imageView1"
        android:layout_marginBottom="65dp"
        android:text="@string/scelta" />
   

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignLeft="@+id/imageView1" />
   
 <TextView android:id="@+id/dateDisplay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""/>
   
    <Button
        android:id="@+id/pickDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="Scegli anno" />

</RelativeLayout>

Offline matttt

Re:Dubbio su passaggio ad altra activity
« Risposta #1 il: 24 Settembre 2013, 18:19:13 CEST »
+1
Se non hai in mente cose "strane" ti basta una sola activity alla quale passi come parametri genere musicale e anno, poi con essi componi la tua query e con i risultati che ottieni popoli la tua list view.
Tutorial per passare dati tra activities:
[facile] Passaggio di dati tra un'activity ed un'altra - Android Developers Italia
Le mie apps su Google Play Store:

Offline GNex4

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4, Galaxy Nexus, Nexus 7
  • Sistema operativo:
    Mac OS X, Windows 8
Re:Dubbio su passaggio ad altra activity
« Risposta #2 il: 24 Settembre 2013, 18:42:44 CEST »
0
Si, ma sempre tramite lo spinner e il datapicker? potresti farmi un esempio ?

Offline matttt

Re:Dubbio su passaggio ad altra activity
« Risposta #3 il: 24 Settembre 2013, 19:03:05 CEST »
+1
Setup dello spinner:
Codice (Java): [Seleziona]
Spinner spinner = (Spinner) findViewById( R.id.spinner1 );
ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, android.R.layout.simple_spinner_item );
adapter.add( "Ambient" );
adapter.add( "Jazz" );
adapter.add( "Rock" );
// ... popolare adeguatamente l'adapter ...
adapter.setDropDownViewResource( android.R.layout.simple_list_item_1 );
spinner.setAdapter( adapter );

Eventualmente se modifichi la lista a runtime ricordati di eseguire Adapter.notifyDataSetChanged() così il tuo spinner si aggiorna automaticamente.
Poi quando è ora di passare il parametro all'altra activity usi:
Codice (Java): [Seleziona]
spinner.getSelectedItem().toString()
Post unito: 24 Settembre 2013, 19:06:38 CEST
Dimenticavo... per il datepicker vedo che ti salvi la selezione in 3 variabili int, per semplificare puoi passare quelle alla tua activity
« Ultima modifica: 24 Settembre 2013, 19:06:38 CEST da matttt, Reason: Merged DoublePost »
Le mie apps su Google Play Store:

Offline GNex4

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4, Galaxy Nexus, Nexus 7
  • Sistema operativo:
    Mac OS X, Windows 8
Re:Dubbio su passaggio ad altra activity
« Risposta #4 il: 24 Settembre 2013, 19:34:07 CEST »
0
Prima cosa grazie! Quindi riepiloghiamo...aggiungo quella prima parte dello spinner nella main acitivty, mentre nella activity list view dove devo visualizzare i dati richiamo la funzione dello spinner. Idem per l'activity anno... giusto?

Offline matttt

Re:Dubbio su passaggio ad altra activity
« Risposta #5 il: 24 Settembre 2013, 19:54:42 CEST »
+1
Aspe... riepilogo (per come la immagino io):
- Activity1: spinner coi generi, datepicker dal quale ti ricavi l'anno, pulsante "cerca"?
- Seleziono il genere, scelgo la data, premo "cerca"
- A quel punto tu richiami Activity2 passando come parametri il genere e l'anno (per vedere come fare guarda il link che ti ho postato in precedenza)
In Activity2 non hai alcun riferimento ai controlli dell'Activity1...
Le mie apps su Google Play Store:

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:Dubbio su passaggio ad altra activity
« Risposta #6 il: 24 Settembre 2013, 20:32:37 CEST »
+1
In Activity2 non hai alcun riferimento ai controlli dell'Activity1...

Quest'ultima frase di matttt è molto importante.

In pratica gli unici modi in cui le activity possono comunicare sono: tramite i dati passati con l'intent (con gli extras) o variabili globali (esempio estendendo Application), con preferenza per il primo modo perchè rende l'activity indipendente da tutto (può addirittura essere richiamata da altre app). Bisogna scordarsi di poter accedere ai controlli di UI o altro.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline GNex4

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4, Galaxy Nexus, Nexus 7
  • Sistema operativo:
    Mac OS X, Windows 8
Re:Dubbio su passaggio ad altra activity
« Risposta #7 il: 25 Settembre 2013, 11:28:53 CEST »
0
Sulla prima activity che è la main penso siamo ok, ho lo spinner coi generi e il datapicker per l'anno. Ho messo il pulsante cerca, quindi passo all'altra acitivity (list view) seguendo questa guida [facile] Passaggio di dati tra un'activity ed un'altra - Android Developers Italia.
Nella seconda activity ho la list view dove dovrei inserire i dati dal db (ho già creato il db in mysql e il pannello in php dove lo gestisco),
ora dove dovrei inserire
Codice: [Seleziona]
spinner.getSelectedItem().toString() e l'eventuale riferimento al datapicker ?
al momento sul file Lista_Music.java ho:

Codice: [Seleziona]
package //;

import java.util.List;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.widget.Toast;
 
public class Lista_Music extends ListActivity implements FetchDataListener{
    private ProgressDialog dialog;
   
   
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        setContentView(R.layout.activity_main);       
        initView();   
    }
 
    private void initView() {
        // show progress dialog
        dialog = ProgressDialog.show(this, "", "Loading...");
         
        String url = "http://10.0.2.2/test/apps.php";
        FetchDataTask task = new FetchDataTask(this);
        task.execute(url);
    }
     
    @Override
    public void onFetchComplete(List<Application> data) {
        // dismiss the progress dialog
        if(dialog != null)  dialog.dismiss();
        // create new adapter
        ApplicationAdapter adapter = new ApplicationAdapter(this, data);
        // set the adapter to list
        setListAdapter(adapter);       
    }
 
    @Override
    public void onFetchFailure(String msg) {
        // dismiss the progress dialog
        if(dialog != null)  dialog.dismiss();
        // show failure message
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();       
    }
}