Autore Topic: Popolare una ListView  (Letto 953 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Popolare una ListView
« il: 15 Maggio 2012, 16:49:35 CEST »
0
Ciao a tutti.. Ho la necessità di popolare una ListView con ogni riga personalizzata. Creo quindi delle TextView che poi vado ad inserire nella ListView. Non riesco però a capire bene come fare.. ed infatti mi ritrovo una ListView sotto ad un gruppo di TextView.. Come posso fare? Ecco il codice:

l'xml choice che contiene una textview e una listview:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">


    <TextView
       android:id="@+id/textView1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Scegli il Workflow da testare:"
       android:gravity="center" />

    <TextView
       android:id="@+id/textView2"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Workflow di default" />

    <TextView
       android:id="@+id/masterTv"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Master" />

    <TextView
       android:id="@+id/textView3"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Nuovi Workflow" />

    <TextView
       android:id="@+id/wfsTv"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:textSize="20dp"
       android:textStyle="bold"
       android:onClick=""
       android:padding="20dp"
       android:paddingBottom="10dp"/>

    <ListView
       android:id="@+id/wfsLv"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:dividerHeight="0dp"  
   ></ListView>
</LinearLayout>

il codice xml relativo ad ogni textview:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:orientation="horizontal"
       android:weightSum="10"      
       >
        <TextView              
               android:id="@+id/IDTv"
               android:layout_width="0dp"
               android:layout_height="wrap_content"
               android:layout_weight="8"
               android:textSize="15dp"
               android:textStyle="bold"
               android:textColor="#000000">
        </TextView>
        <TextView              
               android:id="@+id/nameTv"
               android:layout_width="0dp"
               android:layout_height="wrap_content"
               android:layout_weight="8"
               android:textSize="15dp"
               android:textStyle="bold"
               android:textColor="#000000">
        </TextView>
        <TextView              
               android:id="@+id/classTv"
               android:layout_width="0dp"
               android:layout_height="wrap_content"
               android:layout_weight="2"
               android:textSize="15dp"
               android:textStyle="bold"
               android:textColor="#000000">
        </TextView>
</LinearLayout>

E la classe Java che deve creare il tutto:

Codice (Java): [Seleziona]
private MyDatabase db;
        TextView wfsTv;
        ListView wfsLv;
        private Cursor c;
       

       
       
       
        public MyDatabase getDb() {
                return db;
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.choice);
               
                properties_container = (LinearLayout ) findViewById(R.id.properties_container);
               
                String host = (String) InitJadeProperties.retrieve(this, getString(R.string.main_container_host), getString(R.string.default_host));
                String port = (String) InitJadeProperties.retrieve(this, getString(R.string.main_container_port), getString(R.string.default_port));
               
                wfsTv=(TextView)findViewById(R.id.wfsTv);
                ListView wfsLv = (ListView)findViewById(R.id.wfsLv);
               
                db=new MyDatabase(getApplicationContext());
        db.open();  //apriamo il db
       
       
        if(db.fetchWfs().getCount()==0){//inserimento dati, solo se il db è vuoto
       
                db.insertWf("WF1", "class1");
                db.insertWf("WF2", "class2");
                db.insertWf("WF3", "class3");
                db.insertWf("WF4", "class4");
                db.insertWf("WF5", "class5");
       
        }
 
        c=db.fetchWfs(); // query
        startManagingCursor(c);
       
        SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                        this,
                        R.layout.wfs, //il layout di ogni riga/prodotto
                        c,
                        new String[]{MyDatabase.WfMetaData.ID,MyDatabase.WfMetaData.WF_NAME_KEY,MyDatabase.WfMetaData.WF_CLASS_KEY},//questi colonne
                        new int[]{R.id.IDTv,R.id.nameTv,R.id.classTv});//in queste views
       
        wfsLv.setAdapter(adapter); //la listview ha questo adapter
       
        adapter.notifyDataSetChanged();
        //qui vediamo invece come reperire i dati e usarli, in questo caso li stampiamo in una textview
       
        int nameCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_NAME_KEY);  //indici delle colonne
        int classCol=c.getColumnIndex(MyDatabase.WfMetaData.WF_CLASS_KEY);      
       
        if(c.moveToFirst()){  //se va alla prima entry, il cursore non è vuoto
                do {
                               
                        wfsTv.append("Wf Name:"+c.getString(nameCol)+", Class:"+c.getString(classCol)+"\n"); //estrazione dei dati dalla entry del cursor
                                       
                        } while (c.moveToNext());//iteriamo al prossimo elemento
        }
       
        db.close();
        getWindow().setFormat(PixelFormat.RGBA_8888);   //visto che usiamo i gradient, usiamo questo trick (vedi snippet forum)
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);  
       
        //wfsLv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
        //wfsTv.setBackgroundDrawable(new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{Color.RED,Color.parseColor("#f2bf26")}));
        //definizione ed uso di gradient in modo programmatico
       
       
        //animazioni in modo programmatico (vedi snippet forum)
        Animation a1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
        a1.setDuration(1000);
        a1.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
        wfsLv.startAnimation(a1);
        //entra da sotto
       
       
        Animation a2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
        a2.setDuration(1000);
        a2.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.decelerate_interpolator));
        wfsTv.startAnimation(a2);
        //entra da sopra
       
        wfsTv.setOnClickListener(new View.OnClickListener() {
               
                        @Override
                        public void onClick(View v) {
                                CharSequence text = "Workflow scelto!";
                                int duration = Toast.LENGTH_SHORT;

                                Toast toast = Toast.makeText(getApplicationContext(), text, duration);
                                toast.show();
                               
                        }
                });
       
        wfsLv.setClickable(true);
        //e affidiamo la gestione del tap/click ad un apposito listener, che ci permetterà di agire sull’elemento cliccato e ricaricare la nostra lista

        wfsLv.setOnItemClickListener
               (new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent,
                  View v, int position, long id) {
         //TextView txtId = (TextView)v.findViewById(R.id.wfsTv);
         if(position == 0){
                CharSequence text = "Workflow scelto!";
                        int duration = Toast.LENGTH_SHORT;

                        Toast toast = Toast.makeText(getApplicationContext(), text, duration);
                        toast.show();
         c.requery();
        }}
               });
       
        //adapter.notifyDataSetChanged();
               
        /*wfsTv.setOnClickListener(new View.OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                                CharSequence text = "Workflow scelto!";
                                int duration = Toast.LENGTH_SHORT;

                                Toast toast = Toast.makeText(getApplicationContext(), text, duration);
                                toast.show();
                               
                        }
                });*/

     
               
       
                TextView masterTv = (TextView)findViewById(R.id.masterTv);
                masterTv.setText("Master");
                masterTv.setOnClickListener(new View.OnClickListener() {
                       
                        @Override
                        public void onClick(View v) {
                                startSubActivity();
                               
                        }
                });
        }

Grazie

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Popolare una ListView
« Risposta #1 il: 16 Maggio 2012, 12:25:56 CEST »
0
Nessuno mi può dare una mano?