Установить длинный клик для просмотра списка

У меня есть коды:

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); }} 

Мне нужно изменить это на onListItemLongClick (), но как? Является ли это возможным?

Solutions Collecting From Web of "Установить длинный клик для просмотра списка"

Ваш вопрос очень похож на этот , но похоже, что это не точный дубликат.

Вы заметили, что класс ListActivity не имеет метода переопределения для этого случая.

Чтобы добавить эту функциональность в качестве переопределения метода, ваш класс должен реализовать интерфейс AdapterView.OnItemLongClickListener , а затем вы можете добавить переопределение метода onItemLongClick() , которое действует так же, как и метод onListItemClick() который вы уже имеете, но отвечает на Длинные клики.

Просто убедитесь, что вы следуете инструкциям из этого ответа , вы должны использовать android:longClickable="true" в макете xml или вызвать listview.setLongClickable(true);

Пример:

 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(); } //.................... 

Вы можете просто сделать это с помощью 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; } }); 

попробуй это

 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> arg0, View v, int index, long arg3) { // write your code return false; }}); 

Вы можете реализовать слушателя, тогда обратный вызов будет отображаться как функция (метод) в вашем классе:

 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; } } 

Да, это возможно и довольно легко добиться, просто вы должны сделать экземпляр списка

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

В вашем случае вместо расширения ListActivity вы можете создать представление списка в xml и найти представление в MainActivity и выполнить описанный выше шаг.