Autore Topic: Gestion click su listView, cursor, id e posizione  (Letto 1110 volte)

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Gestion click su listView, cursor, id e posizione
« il: 04 Novembre 2010, 00:09:29 CET »
0
Codice (Java): [Seleziona]
 AdapterView.OnItemClickListener mItemListener =
           new OnItemClickListener() {
           public void onItemClick(AdapterView parent,View v,int pos,long id) {
                 
                   db.fetchProducts();
                   
                          String mio_id = new String (Long.toString(id));
               
                          Cursor c2=null;
                 
                  try{ 
                          String sql="SELECT * FROM partite WHERE _id="+mio_id;
                          c2 = db.rawQuery(sql,null );
                          c2.moveToFirst();                    
                          do {
                                  dataTv.append(c2.getString(0));
                          }
                          while ( c2.moveToNext() );
                         
                  }catch(Exception e){
                         // Log.e("Errore!", e.getMessage());
                  }finally{
                 
                          if(c2!=null){
                         
                                  c2.close();
                         
                          }
                         
                  }
                   launchSingle();
           }
           };
Il codice sopra dovrebbe mostrarmi gli elementi della mia tabella al click sull'elemento della listView e poi far partire un activity con la textView che me li visualizza. Non da problemi, ma la textview non visualizza nulla.....possibili motivazioni?

EDIT Ho fatto alcune modifiche, ma il cursore rimane vuoto!
« Ultima modifica: 04 Novembre 2010, 14:21:51 CET da androider »
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #1 il: 04 Novembre 2010, 14:22:27 CET »
0
Per favore qualcuno che gli può dare un occhiata che non riesco ad andare avanti  :'(
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

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:Gestion click su listView, cursor, id e posizione
« Risposta #2 il: 04 Novembre 2010, 14:37:24 CET »
+1
Per favore qualcuno che gli può dare un occhiata che non riesco ad andare avanti  :'(

Più che dirti dove sta l'errore (cosa di cui in questo momento non ho la minima idea), posso dirti cosa farei per isolare il problema. Prima di tutto divide-et-impera, cioè quando il problema è troppo grosso, spezzettalo il più possibile e risolvi un pezzettino alla volta.

Per esempio rimuoverei completamente il codice della query da onItemClick e ci metterei solamente la scrittura nella textview. Così validi il listener e l'azione che gli vuoi far compiere.

Codice (Java): [Seleziona]
String mio_id = new String (Long.toString(id));
dataTv.append(mio_id);

Partendo da questo cominci a rimettere codice, mettendone il meno possibile ad ogni step.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #3 il: 04 Novembre 2010, 14:49:09 CET »
0
Com'è possibile che non mostri nulla neanche con dataTv.append(mio_id) ? l'adapter non legge l'id??
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

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:Gestion click su listView, cursor, id e posizione
« Risposta #4 il: 04 Novembre 2010, 14:59:00 CET »
0
Com'è possibile che non mostri nulla neanche con dataTv.append(mio_id) ? l'adapter non legge l'id??

Se l'errore è ancora più a monte, fai uscire nel LogCat sia ID che MIO_ID, anche solo per avere un punto fermo su cosa funziona e cosa no.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #5 il: 04 Novembre 2010, 15:06:57 CET »
0
Dunque se lascio solo il metodo che richiama l'activity in cui c'è la textView che devo visualizzare, funziona ( al click sull'item parte l'activity).

Se invece metto dataTv.append(mio_id); mi da un NullPointerException.. ???
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

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:Gestion click su listView, cursor, id e posizione
« Risposta #6 il: 04 Novembre 2010, 15:18:29 CET »
0
Dunque se lascio solo il metodo che richiama l'activity in cui c'è la textView che devo visualizzare, funziona ( al click sull'item parte l'activity).

Se invece metto dataTv.append(mio_id); mi da un NullPointerException.. ???

Spezzetta ancora il problema, prova con dataTv.append("prova") e vedi cosa accade. Se non va, il problema sarà dataTv (rimane solo quello :D ).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #7 il: 04 Novembre 2010, 15:21:00 CET »
0
Infatti è quello che stavo provando a fare..e incredibile non funziona neanche in quello modo..sempre nullPointerException.
Scusa ma com'è possibile che il problema sia la textView?
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

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:Gestion click su listView, cursor, id e posizione
« Risposta #8 il: 04 Novembre 2010, 15:26:31 CET »
0
Infatti è quello che stavo provando a fare..e incredibile non funziona neanche in quello modo..sempre nullPointerException.
Scusa ma com'è possibile che il problema sia la textView?

Potrebbe essere che nello "scope" del listener, la variabile dataTv non è valida.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #9 il: 04 Novembre 2010, 15:28:18 CET »
0
E allora come potrei fare alternativamente a mostrare informazioni su un oggetto della listVIew quando viene cliccato? Usando quindi l'id, o la posizione?
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

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:Gestion click su listView, cursor, id e posizione
« Risposta #10 il: 04 Novembre 2010, 15:40:01 CET »
0
E allora come potrei fare alternativamente a mostrare informazioni su un oggetto della listVIew quando viene cliccato? Usando quindi l'id, o la posizione?

Dal piccolo scampolo di codice mi sembrava fossimo giunti alla conclusione che il problema è dataTv (e non id o pos) a malfunzionare.

La domanda da porsi mi pare sia: perchè dataTv non è valida?

Io ti domando: dove hai dichiarato la variabile dataTv?

(se poi posti più codice, fatichiamo tutti e due di meno  8-) )
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #11 il: 04 Novembre 2010, 15:42:19 CET »
0
Sono talmente ossessionato da questo errore che ti posto tutta la classe sperando che riusciamo a risolverlo:
Codice (Java): [Seleziona]
package com.android;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;

public class ListMatch extends Activity {
       
public MyDatabase db;
   
    Cursor cur;
    SimpleCursorAdapter adapter;
    public String selectedItem;
   
   
    private static final int CANCEL_ID = Menu.FIRST;
    private static final int EDIT_ID = Menu.FIRST+1;
    private static final int DELETE_ID = Menu.FIRST+2;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listmatch);
   
   final TextView singleTv=(TextView)findViewById(R.id.singlematch);
   final ListView matchLv=(ListView) findViewById(R.id.productsLv);
   ImageButton homeBut=(ImageButton) findViewById(R.id.homeBut);

   db=new MyDatabase(getApplicationContext());
   db.open();
   
   cur=db.fetchProducts();
   startManagingCursor(cur);
   cur.requery();
   
   homeBut.setOnClickListener(new View.OnClickListener(){

       @Override
       public void onClick(View v) {
                     
                launchHome();
                               
               }}      
        );
   
   adapter=new SimpleCursorAdapter(
            this,
            R.layout.table, //il layout di ogni riga/prodotto
            cur,
            new String[]{MyDatabase.Match.DAY,MyDatabase.Match.MESE,MyDatabase.Match.ANNO,MyDatabase.Match.AVVERSARIO},//questi colonne
            new int[]{R.id.avvTv,R.id.nameTv,R.id.priceTv,R.id.golTv});//in queste views
 
    matchLv.setAdapter(adapter);

    adapter.notifyDataSetChanged();

    AdapterView.OnItemClickListener mItemListener =
           new OnItemClickListener() {
           public void onItemClick(AdapterView<?> parent,View v,int pos,long id) {

                        //  String mio_id = new String (Long.toString(id));
                        //singleTv.append("ciao");  
                         /*Cursor c2=null;
                         
                  try{ 
                         /* String sql="SELECT * FROM partite";// WHERE _id?="+mio_id;
                          c2 = db.rawQuery(sql,null );
                          c2.moveToFirst();                  
                         // do {
                                 
                         // }
                         // while ( c2.moveToNext() );
                         
                  }catch(Exception e){
                         // Log.e("Errore!", e.getMessage());
                  }finally{
                 
                          if(c2!=null){
                         
                                  c2.close();
                         
                          }
                         
                  } */

                   //launchSingle();
           }
         
           
           };
        ((ListView)findViewById(R.id.productsLv)).setOnItemClickListener(mItemListener);
        registerForContextMenu(findViewById(R.id.productsLv));
       
   
   
    }
       
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
   super.onCreateContextMenu(menu,v,menuInfo);
   menu.add(0,CANCEL_ID,0,"Annulla");
   menu.add(0,EDIT_ID,0,"Edit");
   menu.add(0,DELETE_ID,0,"Delete");
}
 
@Override
public boolean onContextItemSelected(MenuItem item) {
   AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
   switch (item.getItemId()) {
   case CANCEL_ID:
      return true;
   case EDIT_ID:
      Toast.makeText(getApplicationContext(),"info.position="
                    +info.position,Toast.LENGTH_SHORT).show();
      return true;
   case DELETE_ID:
           String[] mio_id = new String[] {Long.toString(info.id)};
           db.delete(MyDatabase.Match.MATCH_TABLE, MyDatabase.Match.ID+"=?", mio_id);
      adapter.notifyDataSetChanged();
      launchList();
      return true;
   default:
      return super.onContextItemSelected(item);
   }
}    
 
protected void launchDel(){
        Intent i=new Intent(this,DeleteMatch.class);
        startActivity(i);
        }
protected void launchSingle(){
        Intent i=new Intent(this,SingleMatch.class);
        startActivity(i);
        }
protected void launchList(){
        Intent i=new Intent(this,ListMatch.class);
        startActivity(i);
        }
public void launchHome(){
        Intent i=new Intent(this,Home.class);
        startActivity(i);
}
protected void launchAdd(){
        Intent i=new Intent(this,AddMatch.class);
        startActivity(i);
        }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
        public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
        switch (item.getItemId()) {
        case R.id.exit:
                finish();
                return true;
        case R.id.addM:
                launchAdd();
                return true;
        case R.id.del:
                db.deleteAll();
                launchAdd();
                return true;
        case R.id.delM:
                launchDel();
                return true;

                default:
                return super.onOptionsItemSelected(item);
}
}
}
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

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:Gestion click su listView, cursor, id e posizione
« Risposta #12 il: 04 Novembre 2010, 15:59:40 CET »
0
Ma se al posto di

Codice (Java): [Seleziona]
singleTv.append("ciao");
scrivi

Codice (Java): [Seleziona]
TextView pippoTv=(TextView)findViewById(R.id.singlematch);
pippoTv.append("ciao");

cosa fa?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline androider

  • Translate Team
  • Utente normale
  • ***
  • Post: 261
  • In campo come nella vita.
  • Respect: +1
    • andreadannibale
    • andreadevil
    • Mostra profilo
    • AnAndroider
  • Dispositivo Android:
    Nexus One
  • Play Store ID:
    AnAnApps
  • Sistema operativo:
    Mac Os X Snow Leopard
Re:Gestion click su listView, cursor, id e posizione
« Risposta #13 il: 04 Novembre 2010, 16:07:21 CET »
0
ancora nullPointerException o_O
Se i cosiddetti "migliori" di noi avessero il coraggio di
sottovalutarsi almeno un po' vivremmo in un mondo infinitamente migliore.

In ogni cAso nessun rimorso.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Gestion click su listView, cursor, id e posizione
« Risposta #14 il: 04 Novembre 2010, 16:10:00 CET »
0
Ma nel layout la view a cui tendi di accedere c'è o no?