Autore Topic: AutoTextView non mostra lista suggerimenti  (Letto 614 volte)

Offline radeon75

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S / Mediacom SmartPad 810c
  • Sistema operativo:
    Windows 7
AutoTextView non mostra lista suggerimenti
« il: 30 Marzo 2012, 11:56:59 CEST »
0
Salve a tutti, sono giorni che sto uscendo pazzo per una autocompletetextview (popolata dal DB con i comuni italiani) che non mostra i suggerimenti quando digito le prime lettere del comune.
Mi spiego meglio: ho testato la textview in un'activity a se stante per verificarne il funzionamento (creo il db, le tabelle, popolo le tabelle con i dati dei comuni, provincia, regione etc, creo l'adapter con il cursor.....).
Aggiungo la autotextview ad una semplice activity, la faccio partire e funziona alla perfezione ( il codice dell'activity SelectState e del dbadapter AutocompleteDbAdapter è di seguito)
Codice (Java): [Seleziona]
package org.oowb.AutoCompleteExample;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils.InsertHelper;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

/**
 * Simple database access helper class.
 *
 * @author Dan Breslau
 */

public class AutoCompleteDbAdapter {
    /**
     * List of states and capitals.
     */

   
    //private static final String DATABASE_NAME = "prova";
    private static final String DATABASE_NAME = "comuniItaliani";
    private static final String TABLE_NAME = "comuni";
    private static final int DATABASE_VERSION = 1;

    private class DatabaseHelper extends SQLiteOpenHelper {

        Context mContext;
               
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            mContext = context;
        }
       
       
        @Override
        public void onCreate(SQLiteDatabase db){
            final String DATABASE_CREATE_STATES =
                    "CREATE TABLE IF NOT EXISTS " + TABLE_NAME
                            + "(_id integer primary key autoincrement"
                            + ", comune text not null"
                            + ", provincia text not null"
                            + ", nome_provincia text not null"
                            + ", regione text not null)";

            db.execSQL(DATABASE_CREATE_STATES);
            Log.i("DB", "DataBase Creato");
            //load(db, new InputStreamReader(this.getClass().getResourceAsStream("dati.csv")));
            if (!tableExists(db, TABLE_NAME)){
                try {
                        Toast.makeText(mContext,"Importo comuni.csv",Toast.LENGTH_SHORT).show();
                        load(db, new InputStreamReader(this.mContext.getAssets().open("comuni.csv")));
                        Toast.makeText(mContext,"Comuni importati",Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
            }
           
           
        }// close onCreate             


        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(db);
        }
    }

    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
    private final Activity mActivity;

    /**
     * Constructor - takes the context to allow the database to be
     * opened/created
     *
     * @param activity
     *            the Activity that is using the database
     */

    public AutoCompleteDbAdapter(Activity activity) {
        this.mActivity = activity;
        mDbHelper = this.new DatabaseHelper(activity);
        mDb = mDbHelper.getWritableDatabase();
    }

    /**
     * Closes the database.
     */

    public void close() {
        mDbHelper.close();
    }
   
    public boolean tableExists(SQLiteDatabase db, String tableName){
        Cursor cursor = db.query(tableName, null,null,null,null,null,null);
        cursor.moveToFirst();
        boolean check = false;
        if(cursor == null){
                check=true; // è vuoto
        } else {
                check=false;//c'è almeno una riga
        }
        cursor.close();
        return check;
    }
    private void load(SQLiteDatabase db, InputStreamReader in) {
        BufferedReader reader = new BufferedReader(in);
        try {
                String line = null;
                while ( (line = reader.readLine()) != null ) {
                                Log.i("DB", "Inserisco un comune");
                        db.insert(TABLE_NAME, null, getContentValues(line));
                }
                reader.close();
        } catch (IOException e) {
                e.printStackTrace();
        } finally {
                if (in != null) {
                        try {
                                in.close();
                        } catch (IOException e) {
                        }
                }
        }
    }
    public static ContentValues getContentValues(String value) {
        ContentValues result = new ContentValues();
        StringTokenizer stringTokenizer = new StringTokenizer(value, ";");
        result.put("_id", stringTokenizer.nextToken());
        result.put("comune", stringTokenizer.nextToken());
        result.put("provincia", stringTokenizer.nextToken());
        result.put("nome_provincia", stringTokenizer.nextToken());
        result.put("regione", stringTokenizer.nextToken());
       
        return result;
}
   
    public Cursor getMatchingStates(String constraint) throws SQLException {

        String queryString =
                        "SELECT _id, comune, provincia FROM " + TABLE_NAME;
                        //"SELECT id, comune, provincia FROM " + TABLE_NAME;
                        //"SELECT comune, provincia FROM " + TABLE_NAME;
        if (constraint != null) {
            // Query for any rows where the state name begins with the
            // string specified in constraint.
            //
            // NOTE:
            // If wildcards are to be used in a rawQuery, they must appear
            // in the query parameters, and not in the query string proper.
            // See [url=http://code.google.com/p/android/issues/detail?id=3153]Issue 3153 -
 android -
 
 SQLiteException on LIKE SELECT -
 Android - An Open Handset Alliance Project - Google Project Hosting
 [/url]
            constraint = constraint.trim() + "%";
            queryString += " WHERE comune LIKE ?";
        }
        String params[] = { constraint };

        if (constraint == null) {
            // If no parameters are used in the query,
            // the params arg must be null.
            params = null;
        }
        try {
            Cursor cursor = mDb.rawQuery(queryString, params);
            if (cursor != null) {
                //this.mActivity.startManagingCursor(cursor);
                cursor.moveToFirst();
                return cursor;
            }
        }
        catch (SQLException e) {
            Log.e("AutoCompleteDbAdapter", e.toString());
            throw e;
        }

        return null;
    }

   
}//end class

Codice (Java): [Seleziona]
package org.oowb.AutoCompleteExample;

import java.util.ArrayList;
import java.util.Collections;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.ScrollView;
import android.widget.SimpleCursorAdapter;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleCursorAdapter.CursorToStringConverter;
import android.widget.Toast;

/**
 * A simple Android Activity to demonstrate:
 *
 * 1) How to use an AutoCompleteTextView with a SimpleCursorAdapter
 *
 * 2) How to access the cursor row for the user's choice, to obtain additional
 * data from that row when an item is selected.
 *
 * @author Dan Breslau
 *
 */

public class SelectState extends Activity {

   

    private TextView mStateCapitalView;
    private AutoCompleteTextView mStateNameView;
    private AutoCompleteDbAdapter mDbHelper;
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView (this);
        tv.setId(BIND_AUTO_CREATE);
        int[] to = new int[] { android.R.id.text1 };
        String[] from = new String[] { "comune" };
       
        mDbHelper = new AutoCompleteDbAdapter(this);
        ScrollView sv = new ScrollView(this);
        final LinearLayout ll = new LinearLayout(this);
       
        sv.addView(ll);

        ll.setOrientation(android.widget.LinearLayout.VERTICAL);
       
        //mStateCapitalView = (TextView) findViewById(R.id.state_capital);
        mStateCapitalView = new TextView(this);
        //mStateNameView = (AutoCompleteTextView) findViewById(R.id.state_name);
        mStateNameView = new AutoCompleteTextView(this);
       
        // Create a SimpleCursorAdapter for the State Name field.
        SimpleCursorAdapter adapter =
            new SimpleCursorAdapter(this,
                    android.R.layout.simple_dropdown_item_1line, null,
                    from, to);
        mStateNameView.setAdapter(adapter);
        mStateNameView.setWidth(250);
       // mStateNameView.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
       
        // Set an OnItemClickListener, to update dependent fields when
        // a choice is made in the AutoCompleteTextView.
        mStateNameView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> listView, View view,
                        int position, long id) {
                // Get the cursor, positioned to the corresponding row in the
                // result set
                Cursor cursor = (Cursor) listView.getItemAtPosition(position);

                // Get the state's capital from this row in the database.
                String capital =
                    //cursor.getString(cursor.getColumnIndexOrThrow("capital"));
                        cursor.getString(cursor.getColumnIndexOrThrow("provincia"));

                // Update the parent class's TextView
                mStateCapitalView.setText(capital);
            }
        });

        // Set the CursorToStringConverter, to provide the labels for the
        // choices to be displayed in the AutoCompleteTextView.
        adapter.setCursorToStringConverter(new CursorToStringConverter() {
            public String convertToString(android.database.Cursor cursor) {
                // Get the label for this row out of the "state" column
                //final int columnIndex = cursor.getColumnIndexOrThrow("state");
                final int columnIndex = cursor.getColumnIndexOrThrow("comune");
                final String str = cursor.getString(columnIndex);
                return str;
            }
        });

        // Set the FilterQueryProvider, to run queries for choices
        // that match the specified input.
        adapter.setFilterQueryProvider(new FilterQueryProvider() {
            public Cursor runQuery(CharSequence constraint) {
                // Search for states whose names begin with the specified letters.
                Cursor cursor = mDbHelper.getMatchingStates(
                        (constraint != null ? constraint.toString() : null));
                return cursor;
            }
        });
       
        Button confirmButton = new Button(this);
        confirmButton.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
       
        confirmButton.setText("Conferma ed esci");
        confirmButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                setResult(RESULT_OK);
                finish();
            }
        });
        TextView textv = new TextView(this);      
                textv.setText("Ciao sono una text view");
               
                TableLayout tl = new TableLayout(this);
                TableRow domanda = new TableRow(this);
                TableRow risposta = new TableRow(this);
               
                domanda.addView(textv);
                risposta.addView(mStateNameView);
               
                tl.addView(domanda);
                tl.addView(risposta);
               
                ll.addView(tl);
               
                ll.addView(mStateCapitalView);
        ll.addView(confirmButton);
               
        setContentView(sv);
       
       
    }
}
Qui uno screenshot della textview funzionanate:

Questa textview mi serve all'interno di un'interfaccia per la raccolta dati (una scheda interviste). Sono partito da codice già realizzato (che prevedeva l'inserimento di vari elementi come textbox, radiogroup etc), che ho modificato per inserire la mia autotextview.
Ho modificato la classe già esistente per inserire una textview, trasformandola in autotextview, ma quando queste viene  visualizzata si comporta come una normale textview, infatti non appare la lista di suggerimenti con i nomi dei comuni.
Ecco lo screenshot dell'applicazione con la autotextview "dormiente":

Riporto il codice della classe per l'autotextview:
Codice (Java): [Seleziona]
package com.msi.ibm;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FilterQueryProvider;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.SimpleCursorAdapter;
import android.widget.TableLayout;
import android.widget.TableRow;

import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.LinearLayout.LayoutParams;
import android.widget.SimpleCursorAdapter.CursorToStringConverter;


public class XmlGuiAutoComplete extends LinearLayout {
        TextView label;
        AutoCompleteTextView autoTxt;
        int nCampi=1;
        String provincia;
        StringBuilder nota;
               
        final static int[] to = new int[] { android.R.id.text1 };
    final static String[] from = new String[] { "comune" };


    MyDataBase mDbHelper;
               
        public XmlGuiAutoComplete(Context context,String labelText) {
                super(context);
               
                TableLayout tl = new TableLayout(context);
                TableRow domanda  = new TableRow(context);
                TableRow risposta  = new TableRow(context);
                nota = new StringBuilder();
                mDbHelper = new MyDataBase(context);
                autoTxt = new AutoCompleteTextView(context);
               
               
                mDbHelper.open();
        SimpleCursorAdapter adapter =
            new SimpleCursorAdapter(context,
                    android.R.layout.simple_dropdown_item_1line, null,
                    from, to);
        autoTxt.setAdapter(adapter);
        //autoTxt.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.MATCH_PARENT));
               
        autoTxt.setWidth(250);
        //autoTxt.performCompletion();
       // autoTxt.setThreshold(1);
       
       
     // Set an OnItemClickListener, to update dependent fields when
        // a choice is made in the AutoCompleteTextView.
        autoTxt.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> listView, View view,
                        int position, long id) {
                // Get the cursor, positioned to the corresponding row in the
                // result set
                Cursor cursor = (Cursor) listView.getItemAtPosition(position);

                // Get the state's capital from this row in the database.
                String prov =                  
                        cursor.getString(cursor.getColumnIndexOrThrow("provincia"));

                //provincia = prov;
            }
        });

        // Set the CursorToStringConverter, to provide the labels for the
        // choices to be displayed in the AutoCompleteTextView.
        adapter.setCursorToStringConverter(new CursorToStringConverter() {
            public String convertToString(android.database.Cursor cursor) {
                // Get the label for this row out of the "state" column
                //final int columnIndex = cursor.getColumnIndexOrThrow("state");
                final int columnIndex = cursor.getColumnIndexOrThrow("comune");
                final String str = cursor.getString(columnIndex);
                return str;
            }
        });

        // Set the FilterQueryProvider, to run queries for choices
        // that match the specified input.
        adapter.setFilterQueryProvider(new FilterQueryProvider() {
            public Cursor runQuery(CharSequence constraint) {
                // Search for states whose names begin with the specified letters.
                Cursor cursor = mDbHelper.getComuni(
                        (constraint != null ? constraint.toString() : null));
                return cursor;
            }
        });
               
        mDbHelper.close();
       
           
                label = new TextView(context);
                label.setText(labelText);
                domanda.addView(label);
                risposta.addView(autoTxt);
                tl.addView(domanda);
                tl.addView(risposta);
                this.addView(tl);
               
       

        }
        public XmlGuiAutoComplete(Context context, AttributeSet attrs) {
                super(context, attrs);
                // TODO Auto-generated constructor stub
        }
       
       
        public String getValue()
        {
                return autoTxt.getText().toString();
        }
       
        public int getNumField()
        {
                return nCampi;
        }
       

Qui c'è il la parte di codice che mostra la form completa di tutti i suoi elementi:
Codice (Java): [Seleziona]
private boolean DisplayForm()
        {
               
                try
                {
                        ScrollView sv = new ScrollView(this);
                       
                        final LinearLayout ll = new LinearLayout(this);
                //final TableLayout ll = new TableLayout(this);
               
                TextView dataDiOggi = new TextView(this);
                dataDiOggi.setText("Data: "+now());
                //dataDiOggi.setTextSize(7);

                ll.addView(dataDiOggi); //aggiunge la data di oggi alto/sx al layout
                sv.addView(ll);  //aggiunge il layout alla scrollview
               
                ll.setOrientation(android.widget.LinearLayout.VERTICAL);
               
                // walk thru our form elements and dynamically create them, leveraging our mini library of tools.
                int i;
                for (i=0;i<theForm.fields.size();i++) {
                        if (theForm.fields.elementAt(i).getType().equals("text")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiEditBox(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),"");
                                ll.addView((View) theForm.fields.elementAt(i).obj);

       
                        }
                        if (theForm.fields.elementAt(i).getType().equals("numeric")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiEditBox(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),"");
                                ((XmlGuiEditBox)theForm.fields.elementAt(i).obj).makeNumeric();
                                ll.addView((View) theForm.fields.elementAt(i).obj);
               
                               
                        }
                       
                        //mio codice per mostrare anche il tipo time
                        if (theForm.fields.elementAt(i).getType().equals("time")) {
                                Log.e("PickTime","Aggiungo time");
                                theForm.fields.elementAt(i).obj = new XmlGuiPickTime(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(), "");
                                ll.addView((View) theForm.fields.elementAt(i).obj);
                       
                               
               
                        }
                        //mio codice per mostrare anche il tipo checkbox
                        if (theForm.fields.elementAt(i).getType().equals("check")) {
                                Log.e("PickTime","Aggiungo checkbox");
                                theForm.fields.elementAt(i).obj = new XmlGuiCheckBox(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),theForm.fields.elementAt(i).getOptions());
                                ll.addView((View) theForm.fields.elementAt(i).obj);
                       
                               
                               
                        }
                        if (theForm.fields.elementAt(i).getType().equals("choice")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiPickOne(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),theForm.fields.elementAt(i).getOptions());
                                ll.addView((View) theForm.fields.elementAt(i).obj);
                       
               
                        }
                        //mio codice per mostrare anche il tipo autoTextView
                        if (theForm.fields.elementAt(i).getType().equals("auto")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiAutoComplete(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel());
                                ll.addView((View) theForm.fields.elementAt(i).obj);
                       
                               
                        }
                        //mio codice per mostrare anche il tipo dialog scali aggiuntivi
                        if (theForm.fields.elementAt(i).getType().equals("dialog")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiButtonDialog(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel());
                                ll.addView((View) theForm.fields.elementAt(i).obj);
                               
                        }
                        //mio codice per mostrare anche il tipo radiobutton
                        if (theForm.fields.elementAt(i).getType().equals("radio")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiRadio(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),theForm.fields.elementAt(i).getOptions());
                                ll.addView((View) theForm.fields.elementAt(i).obj);
                               
                                /*CODICE DI PROVA LAYOUT TABELLARE
                                TableRow tr = new TableRow (this);
                                tr.addView((View) theForm.fields.elementAt(i).obj);
                                ll.addView(tr);*/

                        }
                       
                }
               
               
                Button btnCompilaScheda = new Button(this);
                btnCompilaScheda.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));
               
                ll.addView(btnCompilaScheda);
               
                btnCompilaScheda.setText("Salva");
                btnCompilaScheda.setOnClickListener(new Button.OnClickListener() {
                        public void onClick(View v) {
                                // check if this form is Valid
                                if (!CheckForm())
                                {
                                        AlertDialog.Builder bd = new AlertDialog.Builder(ll.getContext());
                                AlertDialog ad = bd.create();
                                ad.setTitle("Errore");
                                ad.setMessage("Inserisci tutti i campi richiesti (*)");
                                ad.show();
                            return;
                               
                               
                                }
                                if (theForm.getSubmitTo().equals("loopback")) {
                                        // just display the results to the screen
                                        String formResults = theForm.getFormattedResults();
                                        Log.i(tag,formResults);
                                                                               
                                        AlertDialog.Builder bd = new AlertDialog.Builder(ll.getContext());
                                AlertDialog ad = bd.create();
                                ad.setTitle("Risultati");
                                ad.setMessage(formResults);

                                ad.show();
                               
                            return;
                               
                               
                                       
                                } else {
                                        if (!SubmitForm()) {
                                                AlertDialog.Builder bd = new AlertDialog.Builder(ll.getContext());
                                        AlertDialog ad = bd.create();
                                        ad.setTitle("Errore");
                                        ad.setMessage("Error submitting form");
                               
                                        ad.show();
                                       
                                    return;
                                         
                                           
                                       
                                       
                                        }
                                }
                                /***************************************************************/
                                //                      Ritorna alla Activity iniziale XmlGui.java         //
                                /***************************************************************/
                                Intent intent = new Intent();
                        setResult(RESULT_OK, intent);
                        finish();
                    }//OnClick
                });//setOnClickListener
               
             
               
                setContentView(sv);
                setTitle(theForm.getFormName());
               
                return true; //se riesce a fare tutto (check e submit)

                } catch (Exception e) {
                        Log.e(tag,"Error Displaying Form");
                        return false;
                       
                }
               
               
        } //close DisplayForm()

In pratica aggiunge ad una ScrollView un LinearLayout che contiene tutti gli elementi della form (per ogni tipo di elemento fa il cast di una View che va ad aggiungere al LinearLayout); ad esempio:

Codice (Java): [Seleziona]
for (i=0;i<theForm.fields.size();i++) {
                        if (theForm.fields.elementAt(i).getType().equals("XXX")) {
                                theForm.fields.elementAt(i).obj = new XmlGuiXXX(this,(theForm.fields.elementAt(i).isRequired() ? "*" : "") + theForm.fields.elementAt(i).getLabel(),"");
                                ll.addView((View) theForm.fields.elementAt(i).obj);

       
                        }
}

Per completezza: il codice per la gestione del Cursor, i metodi nel DB etc. sono IDENTICI sia per la singola Activity di test della autotextview, che per la classe all'interno dell'applicazione per la raccolta dati (un bel copia-incolla, modificando solo ciò che serviva). I dati nel DB sono correttamente presenti in entrambi i casi.
Qualcuno riesce a capirci qualcosa ? Io sto impazzendo.......Grazie infinite in anticipo. Se servono maggiori dettagli non esitate a chiedere.