2015-07-05 10 views
8

mam poniżej kodów:Ustaw długo kliknięcie słuchacz dla ListView

public class MainActivity extends ListActivity { 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
protected void onListItemClick(ListView l, View v, final int position, long id) { 
    super.onListItemClick(l, v, position, id); 
}} 

muszę zmienić na onListItemLongClick() ale jak? Czy to możliwe?

+0

Czy możesz spróbować wyjaśnić, co chcesz robić w inny sposób, z większą ilością szczegółów? Twój przykładowy kod nie wydaje się niczego wykonywać, więc trudno jest zgadnąć ... –

+0

Potrzebuję funkcji, która po kliknięciu długiego czasu (np. 2 sekundy) na pozycję w widoku listy spowoduje, że inne moje kody w funkcji zostaną wykonane. – Matarata

+1

wypróbowałeś http://stackoverflow.com/questions/8846707/how-to-implement-a-long-click-listener-on-a-listview? –

Odpowiedz

5

Twoje pytanie jest bardzo podobne do this one, ale wygląda na to, że nie jest to dokładny duplikat.

Zauważyliśmy, że klasa ListActivity nie ma metody nadpisania specjalnie dla tego przypadku.

Aby dodać tę funkcjonalność jako metoda A ręcznym, klasa powinna implementować interfejs AdapterView.OnItemLongClickListener, a następnie można dodać nadpisanie onItemLongClick() metoda, która działa podobnie jak onListItemClick() metoda obejścia już masz, ale reaguje na długich kliknięć .

Wystarczy upewnić się, że postępujesz zgodnie z instrukcjami z this answer, należy użyć android:longClickable="true" w xml układu lub zadzwoń listview.setLongClickable(true);

Przykład:

public class MainActivity extends ListActivity implements AdapterView.OnItemLongClickListener { 

    ListView listview; 

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

     ListView listview = (ListView) findViewById(R.id.list); 

     listview.setLongClickable(true); 

    } 

    @Override 
    public boolean onItemLongClick(AdapterView<?> l, View v, 
            final int position, long id) { 

     Toast.makeText(this, "long clicked pos: " + position, Toast.LENGTH_LONG).show(); 

     return true; 
    } 

    protected void onListItemClick(ListView l, View v, final int position, long id) { 
     super.onListItemClick(l, v, position, id); 

     Toast.makeText(this, "short clicked pos: " + position, Toast.LENGTH_LONG).show(); 

    } 

//.................... 
+0

Bardzo miło działało. Twój przykład jest tak dobry.tnx – Matarata

2

spróbować

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View v, 
       int index, long arg3) { 

      // write your code 

      return false; 
     }}); 
1

Można zaimplementować słuchacza, to zwrotna wydaje jako funkcja (metoda) w swojej klasie:

public class MainActivity extends ListActivity implements View.OnLongClickListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     View listView = findViewById(R.id.list_view); 
     listView.setOnLongClickListener(this); 
    } 

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

    @Override 
    public boolean onLongClick(View v) { 
     // Do your work here 
     return false; 
    } 

} 
0

Tak to jest możliwe i dość łatwe do osiągnięcia po prostu trzeba zrobić wystąpienie listview jak

ListView lv = (ListView)findViewById(R.id.listview); 
lv.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View 

        return true; 
       } 

     });) 

w twoja sprawa zamiast rozszerzać ListActivity możesz zrobić widok listy w xml i znaleźć widok w MainActivity i postępuj zgodnie z powyższym krokiem.

2

można po prostu zrobić z setOnItemLongClickListener

listview.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      Toast.makeText(ClassName.class, "Long Clicked Trigger: ", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
}); 
Powiązane problemy