2013-04-01 4 views
0

Je m'excuse si c'est une question vraiment basique, mais comment puis-je définir onListItemClick, si j'ai obtenu les éléments de la liste d'un fichier texte sur un serveur? Ce que je veux faire, c'est juste afficher un toast lorsque l'on clique sur l'élément de listview, mais je n'arrive pas à ajouter dans onListItemClick pour le faire. Je pense que c'est à cause de l'essai/catch?Comment définir onListItemClick ici?

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Toast; 

public class ListView extends ListActivity { 
    public String[] ListItems = new String[]{}; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     URL textUrl; 
     try { 
      textUrl = new URL("http://172.30.54.153/databases/result.txt"); 
      BufferedReader bufferReader = new BufferedReader(new InputStreamReader(textUrl.openStream())); 
      String StringBuffer; 
      String stringText = ""; 
      stringText.split(","); 
      while ((StringBuffer = bufferReader.readLine()) != null) { 
       stringText += StringBuffer; 
      } 
      String DbLines = new String(stringText); 
      ListItems = DbLines.split(","); 

      setListAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, ListItems)); 
      bufferReader.close(); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    private void OnListItemClick(ListView Parent,View v, int position, long id) { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "y"+ ListItems[position], Toast.LENGTH_LONG).show(); 
    } 
} 
+0

Etes-vous en train d'obtenir une erreur dans logcat? –

+0

avez-vous ajouté list1 = (ListView) findViewById (R.id.ListView01); pour votre vue de liste? –

+0

ListActivity nommé ListView qui contient un ListView. Vous devriez envisager de renommer votre activité pour éviter les incompatibilités de type et les problèmes de dénomination ambigus. – MCeley

Répondre

1

Vos questions:

Première, votre gestionnaire d'écouteur d'événement privé était dans private, il est donc plus les méthodes héritées, votre code est erroné avec le private:

private void OnListItemClick(ListView Parent,View v, int position, long id) 

Vous devez utiliser élargir la portée de la fonction pour les méthodes de remplacement, signifie public ou protégé. Suggérer, vous devez utiliser l'identifiant @Override pour garantir votre intention d'héritage. Modifiez votre code comme celui-ci (avec @Override et protégé ou public):

@Override 
protected void onListItemClick (ListView l, View v, int position, long id) 
{ 
.... 
} 

voir le guide du SDK: ListActivity.onListItemClick()

Deuxième, vous devez faire votre listview écouter de cliquer sur les événements:

Changer votre définition de classe:

public class ListView extends ListActivity implements OnItemClickListener 
{ 
... 
} 

Et ajoutez le code suivant à 0.123.onCreate(). Ces lignes enregistreront l'activité de liste actuelle (this) avec l'écouteur spécifié:

this.setOnItemClickListener(this); 
0

ajouter dans votre onCreate:

ListView lv = getListView(); 
lv.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(ListView.this, "y"+ ListItems[position], Toast.LENGTH_LONG).show(); 
    } 
}); 

et supprimer ce:

private void OnListItemClick(ListView Parent,View v, int position, long id) { 
    // TODO Auto-generated method stub 
Toast.makeText(this, "y"+ ListItems[position], Toast.LENGTH_LONG).show(); 

} 

Vous pouvez renommer votre classe à quelque chose comme MyListView pour éviter toute confusion

+0

Vous ne pouvez pas appeler 'setOnItemClickListener' sur un' ListActivity'. – Karakuri

+0

Vous pouvez mais vous devez d'abord obtenir le ListView et il n'est pas logique d'ajouter un écouteur à quelque chose qui a un écouteur intégré. – MCeley

0

Lint à OnListItemClick
The method OnListItemClick(ListView, View, int, long) from the type ListActivity is never used locally

Remplacez-le par ceci:
protected void onListItemClick(ListView l, View v, int position, long id)

C'est onListItemClick - on minuscules non OnListItemClick-On majuscules

Hope this aide!

Questions connexes