2015-07-05 17 views
8

Ho seguito i codici:Set clic lungo listener per 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); 
}} 

ho bisogno di cambiare questo per onListItemLongClick() ma come? È possibile?

+0

Puoi provare a spiegare cosa vuoi fare in un modo diverso, con più dettagli? Il tuo codice di esempio non sembra realizzare nulla, quindi è difficile indovinare ... –

+0

Ho bisogno di una funzione che quando faccio clic su molto tempo (come 2 secondi) su un oggetto in listview, vengono eseguiti gli altri miei codici in funzione. – Matarata

+1

hai provato http://stackoverflow.com/questions/8846707/how-to-implement-a-long-click-listener-on-a-listview? –

risposta

5

La tua domanda è molto simile a this one, ma sembra che non sia un duplicato esatto.

Quello che hai notato è che la classe ListActivity non ha un override specifico per questo caso.

Per aggiungere questa funzionalità come metodo di sostituzione, la classe deve implementare l'interfaccia AdapterView.OnItemLongClickListener, e poi si può aggiungere il onItemLongClick() metodo di sostituzione, che agisce proprio come la onListItemClick() metodo di sostituzione avete già, ma risponde a lunghe clic .

Basta fare in modo di seguire le istruzioni da this answer, è necessario utilizzare android:longClickable="true" nel xml di layout, o chiamare listview.setLongClickable(true);

Esempio:

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

Molto bello ha funzionato. il tuo esempio è così buono.tnx – Matarata

2

provare questo

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

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

      // write your code 

      return false; 
     }}); 
1

Si potrebbe implementare l'ascoltatore, poi la richiamata apparirebbe come una funzione (metodo) nella classe:

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

sì è possibile e molto facile da raggiungere semplicemente si deve fare l'istanza del listview come

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

        return true; 
       } 

     });) 

in il tuo caso invece di estendere ListActivity puoi creare una visualizzazione elenco in xml e trovare la vista in MainActivity e seguire il passaggio precedente.

2

si può semplicemente farlo con 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; 
     } 
});