Установить прослушиватель длинных кликов для просмотра списка

У меня есть следующие коды:

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(), но как? Является ли это возможным?

5 ответов

Решение

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

Вы заметили, что класс 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 
                    // your code here
                    return true;
                }

        });)

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

Другие вопросы по тегам