2013-08-06 4 views
2

Voici comment fonctionne mon application. L'utilisateur enregistre un son, puis lui donne un certain nom. Dans cet exemple, je vais enregistrer deux fichiers audio. Test1.mp3 et Test2.mp3. Après que j'ai terminé l'enregistrement pour la première fois, une boîte de dialogue apparaît et je tape 'Test1', de même pour le second enregistrement. Test1.mp3 et Test2.mp3 ont été ajoutés à la liste. Voici le code:Définir onClickListener pour chaque élément de liste unique

//filename is a variable for the name of the file, these lines execute everytime I record a new file 
ArrayList<String> fileNames = new ArrayList<String>(); 
fileNames.add(filename.toString()); 
listView = (ListView) findViewById (R.id.mainListView); 
listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames); 
listView.setAdapter(listAdapter); 

Ainsi, après que je l'ai enregistré les deux fichiers et ils sont ajoutés à listview, je veux mettre onClickListeners aux deux éléments de ListView. Mais comment puis-je le faire? Comment faire pour que chaque fois qu'un nouveau fichier enregistré a été ajouté à la liste, il génère aussi automatiquement la méthode onclick. Ce ne serait pas aussi compliqué mais chaque fichier enregistré, bien sûr, a un chemin différent.

Le code maintenant:

//LISTVIEW 
    fileNames.add(filename.toString()); //adding each filename to ArrayList<String> 
    listView = (ListView) findViewById (R.id.mainListView); 
    listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, fileNames); 
    listView.setAdapter(listAdapter); 

    listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      Toast toast = Toast.makeText(getApplicationContext(), filename, Toast.LENGTH_SHORT); 
      toast.show(); 
     } 

    }); 

Ceci est le code qui exécute chaque nouveau fichier est enregistré

+1

Vous voulez dire un ['onItemClickListener'] (http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html)? – Geobits

Répondre

4

Vous ne devez pas ajouter un nouvel auditeur à chaque fois que vous ajoutez un élément à la liste. Vous pouvez utiliser un OnItemClickListener ensemble une fois pour toutes, et vous serez en mesure de trouver l'élément qui a été cliqué par l'index dans la fonction de rappel

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 

qui est, paramètre int position.

intérieur mise en œuvre onItemClick, vous pouvez alors récupérer l'élément qui a été cliqué par

arg0.getItemAtPosition(position) 

, vous ne devez pas ajouter également le onItemClickListener chaque fois, il vous suffit de préparer une fois dans la méthode onCreate de votre activité et ne jamais le changer.

Ce que vous devrez faire à la place, c'est de créer un nouvel adaptateur (ou d'ajouter un nouvel élément à l'adaptateur) lorsque votre nouvel enregistrement de fichier a pris fin.

J'ai préparé un échantillon presque complet montrer comment utiliser le ListView:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final ArrayList<String> fileNames = new ArrayList<String>(); 
    fileNames.add("Test1.mp3"); 
    fileNames.add("Test2.mp3"); 

    final ListView listView = (ListView) findViewById (R.id.mainListView); 
    ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fileNames); 
    listView.setAdapter(listAdapter); 

    listView.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
      Toast toast = Toast.makeText(getApplicationContext(), 
        (String)arg0.getItemAtPosition(position), Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    }); 
} 

Cela suffit si les éléments de la liste ne changent pas.

Lorsqu'un enregistrement de votre prochain fichier mp3 se termine, et que vous voulez ajouter un élément à la liste, vous pouvez juste faire:

ListView listView = (ListView) findViewById (R.id.mainListView); 
fileNames.add("Test3.mp3"); 
((ArrayAdapter<String>)listView.getAdapter()).notifyDataSetChanged(); 

Remplacer « Test3 » avec votre nouveau nom de mp3 enregistré, et apparaîtra dans la liste.

+0

Merci pour votre réponse! J'ai essayé de le faire mais quelque chose ne fonctionne pas bien. J'ai ajouté du pain grillé pour voir si cela fonctionne mais ce n'est pas le cas. Lorsque j'enregistre Test1.mp3, il affiche Test1 lorsque je clique sur l'élément, mais lorsque j'enregistre Test2, les deux éléments affichent Test2, si vous savez ce que je veux dire. Une idée de ce qui pourrait être mal fait? Je ne comprends pas la partie arg0.getItemAtPosition – Pizzret

+0

Il est étrange que lorsque vous ajoutez un second élément à la liste, le premier élément change.Pouvez-vous poster le code où vous ajoutez de nouveaux éléments à la liste? Je suppose qu'il y a des problèmes dans la façon dont cette partie est implémentée. – Lake

+0

J'ai modifié mon message original, vérifiez-le s'il vous plaît – Pizzret

0
listview.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

    switch(position){ 
    case 0: 
    blablbla 
    break; 
    case1 1: 
    blabla 
    break; 
    /.... 
    } 
    }): 
0

Vous devez spécifier pour chaque élément une fonction onClick. Comme Android Arabia a dit.

Questions connexes