2011-07-18 16 views
34

Pracuję z ListFragment i wykonuję onListItemClick. Wszystko działa poprawnie, ale teraz chcę używać długo Item Click (np setOnItemLongClickListener (nowa OnItemLongClickListener() do prowadzenia działalności). Jak mogę to wykorzystać w moim fragmencie?Długie kliknięcie na ListFragment

Dzięki!

+3

Znalazłem sposób: getListView(). SetOnItemLongClickListener (nowa OnItemLongClickListener() { \t \t \t @Override \t \t \t public boolean onItemLongClick (AdapterView paramAdapterView, \t \t \t Zobacz paramView, int position, długo paramLong) {// TODO return true; } }); – tsync

Odpowiedz

58

Tak, rozwiązanie . wysłane przez tsync pracuje dla mnie też nie wpadł na ten sam problem i uznał, że nie jest to możliwe, starałem powyższą sugestię, co następuje:.

public class ProjectsFragment extends ListFragment { 

@Override 
public void onActivityCreated(Bundle savedState) { 
    super.onActivityCreated(savedState); 

    getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      Toast.makeText(getActivity(), "On long click listener", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
    }); 

i to działało

+0

i to działało również dla mnie. – danny117

+1

ma to znaczenie, jeśli zwrócimy prawdę lub fałsz? @Narayanan – Manny265

+1

@ Manny265 return false uruchomi program nasłuchujący onclick, zwróci true zapobiega temu –

11

działa to dla mnie

!
getListView().setOnItemLongClickListener(new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) { 
     //Get your item here with the position     
     return true; 
    } 
}); 
+0

to jest lepsza odpowiedź – danny117

+3

Ten kod musi być zapisany w 'onViewCreated' w Fragment – Flexicoder

13

W zależności od tego, co chcesz, aby uświadomić sobie, można skorzystać z podanych sposobów oferują bogate menu kontekstowe:

Pierwszy zarejestrować klasę widok, który pobiera długo wciśnięty (wewnątrz swojej klasie fragment):

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

    registerForContextMenu(this.getListView()); 
} 

Następnie zaimplementuj te dwie metody, aby utworzyć menu kontekstowe i rób to, co chcesz, gdy klikniesz na element menu:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 

    MenuInflater inflater = this.getActivity().getMenuInflater(); 
    inflater.inflate(R.menu.my_context_menu, menu); 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 

     case R.id.add: // <-- your custom menu item id here 
      // do something here 
      return true; 

     default: 
      return super.onContextItemSelected(item); 
    } 
} 
+4

Nice! Po prostu chcę dodać, że nie można połączyć registerForContextMenu z setOnItemLongClickListener. Dla niektórych może być oczywiste, ale nie dla mnie. Również dobrze jest wiedzieć, że identyfikator wiersza można pobrać z info.id – Toydor

+0

Dzisiaj po raz pierwszy podniosłem każdą odpowiedź, ponieważ właśnie to miałem zamiar zrobić z wydarzeniem longclick. – danny117