Как обращаться с длинным кликом в Android

Я новичок в Android dev. То, как я обрабатывал клики, – это установить атрибут android:onClick в файле манифеста для кнопок. Мне интересно, как лучше всего обрабатывать длинные клики в целом. Я прочитал о реализации onLongClick() , но есть ли способ использовать обработчики (как и выше), вместо того, чтобы расширять представление? Было бы очень полезно, так как мне бы не пришлось перестраивать весь проект с расширенным классом View.

РЕДАКТИРОВАТЬ

Я должен уточнить. У меня есть ListView и я хочу установить, что произойдет, когда я нажму на элемент в списке. Каждый элемент в списке является TextView . Согласно одному из ответов, я добавил код ниже, и теперь у меня сила:

 public class TwitterActivity extends ListActivity { List<String> tweets = new LinkedList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(this, R.layout.layout, tweets)); TextView view = (TextView) findViewById(R.id.ListTemplate); view.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast toast = new Toast(TwitterActivity.this); toast.setText("LongClick"); toast.show(); return true; } }); //... } } 

Для ListActivity, если вы хотите реагировать на длительные клики по элементам списка, выполните следующие действия:

 public class TwitterActivity extends ListActivity { List<String> tweets = new LinkedList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setListAdapter(new ArrayAdapter<String>(this, R.layout.layout, tweets)); ListView lv = getListView(); lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) { Toast.makeText(TwitterActivity.this, "LongClick", Toast.LENGTH_LONG).show(); } }); } } 

Для регулярной деятельности вы можете сделать что-то вроде этого:

 public class MyActivity extends Activity implements View.onLongClickListener { View myView = null; public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.my_activity); myView = findViewById(r.id.my_view); myView.setOnLongClickListener(this); } @Override public void onLongClick(View v) { //long clicked } } 

Получить дескриптор кнопки с помощью findViewByID, а затем вызвать setOnLongClickListener.

 Button b = (Button)findViewByID (R.id.button1); b.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { //to do } }); 

Конечно, это довольно просто:

 ImageButton i = (ImageButton) findViewById(R.id.myButton); i.setOnLongClickListener(new myLongListener()); private class myLongListener implements View.OnLongClickListener { @Override public void onClick(View v) { //your code here } } 

надеюсь это поможет!

В большинстве случаев вам не нужно расширять класс View . View имеет метод setOnLongClickListener который можно использовать напрямую, поскольку все производные классы, такие как Button или TextView и т. Д., Также будут иметь.

Единственным обработчиком событий, который имеет атрибут XML, является android:onClick . Все остальные обработчики событий регистрируются во время выполнения из кода Java. Технически, даже android:onClick зарегистрирован во время выполнения из Java-кода, но вам не нужно писать соответствующий Java-код.

Поэтому вам нужно сделать что-то вроде этого:

 View.OnLongClickListenerhandler = View.OnLongClickListener() { public void onClick(View v) { switch (v.getId()) { case R.id.myButton: // doStuff break; case R.id.myOtherButton: // doStuff break; } } } findViewById(R.id.myButton).setOnLongClickListener(handler); findViewById(R.id.myOtherButton).setOnLongClickListener(handler);