2012-12-10 1 views
3

Mon onListItemClick n'est jamais appelé quand je clique sur l'élément, la classe étend fragment non listfragment, parce que j'ai d'autres éléments de vue dans ce fragment qui n'est pas liste, donc comment implémenter onlistitemclick dans classe étend fragment?Fragment onListItemClick

classe

public class MainFiles extends Fragment 
{ 
    ArrayList<String> items; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View view = inflater.inflate(R.layout.files, container, false); 

     Button button_up = (Button) view.findViewById(R.id.button_up); 
     items = new ArrayList<String>(); 

     MyAdapter adapter = new MyAdapter(getActivity(), R.layout.row, items); 
     ListView myList = (ListView) view.findViewById(R.id.list); 
     myList.setAdapter(adapter); 

     return view; 
    } 

    public void onListItemClick(ListView l, View v, int position, long id) 
    { 

    } 
} 

Répondre

4

Explicitement ajouter le OnItemClickListener à votre ListView

myList.setOnItemClickListener(this); 

Vous devez également vous assurer que votre Fragment implémente le type OnItemClickListener:

public class MainFiles extends Fragment implements OnItemClickListener 

Une autre façon est de créer une sous-classe de OnItemClickListener dédié à passer au ListView:

myList.setOnItemClickListener(new MyOnItemClickListener()); 

/* ... */ 

private class MyOnItemClickListener implements OnItemClickListener { 

    /* ... */ 

} 
+0

Enfin, il fonctionne, ty :) –

+0

Non! Vous n'avez pas à implémenter cette interface s'il vous plait! J'ai vu cette erreur conceptuelle pendant un certain temps. Un fragment n'a rien à voir avec un OnItemClickListener donc il est conceptuellement erroné de le voir ainsi. L'approche correcte serait de créer un OnItemClickListener en place. Je recommande vivement d'en savoir plus sur quoi et quand mettre en place une interface, c'est un concept fondamental dans OOP. –

+0

@FabricioPH Quelque chose comme ça? Notez que la réponse a presque deux ans et l'OP a laissé entendre qu'il voulait le faire en premier. – nhaarman

3

Vous oubliez de définir la setOnItemClickListener

après myList.setAdapter(adapter); ajouter ceci:

myList.setOnItemClickListener(new OnItemClickListener(){ 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id){ 
     new File(items.get(position)); 
     fileList(path.get(position)); 
     showPath(current_path);     
    } 
}); 
+1

J'ai posté la même réponse, ty de toute façon je vais +1 à :) –

2

Je implémenter l'écouteur dans un fragment comme celui-ci

public class DetailsFragment extends Fragment implements OnItemClickListener { 

    private ListView listView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.fragment_details, container, false); 

     // list view 
     listView = (ListView) root.findViewById(R.id.listView); 
     listView.setListAdapter(new DetailsAdapter(getActivity(), list)); 
     listView.setOnItemClickListener(this); 

     return root; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // handle click here 
    } 

} 
0

Votre fragment doit étendre ListFragment, vous pouvez avoir plus de choses dans votre mise en page autre qu'une liste si votre mise en page a un listview avec id = android: id/liste

Questions connexes