bagaimana menerapkan pendengar klik panjang pada tampilan daftar


148

Saya ingin menambahkan OnLongClickListenerpada tampilan daftar saya. Setiap kali pengguna menekan item dalam daftar, beberapa tindakan harus dilakukan, tetapi kode saya tidak menangkap pendengar ini. Tolong beri tahu saya di mana saya salah. Kode serupa berfungsi dengan setOnItemClickListenersangat baik.

Ini kodenya:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            public boolean onItemLongClick(AdapterView<?> arg0, View v,
                    int index, long arg3) {
                // TODO Auto-generated method stub
                 Log.d("in onLongClick");
                 String str=listView.getItemAtPosition(index).toString();

                 Log.d("long click : " +str);
                return true;
            }
}); 

Apakah Anda ingat untuk menambahkan "mengimplementasikan OnItemLongClickListener" ke deklarasi kelas Anda?
barry

lihat di xml apakah klik panjang diaktifkan?
Menghubungkan kehidupan dengan Android

Mungkin Anda memiliki Pendengar Gerakan atau sesuatu seperti ini yang menangkap pers lama dan mengkonsumsinya.
Jon Zangitu

Jawaban:


317

Anda harus mengatur setOnItemLongClickListener () di ListView:

lv.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int pos, long id) {
                // TODO Auto-generated method stub

                Log.v("long clicked","pos: " + pos);

                return true;
            }
        }); 

XML untuk setiap item dalam daftar (harus Anda gunakan XML kustom) juga harus memiliki android:longClickable="true"(atau Anda dapat menggunakan metode kenyamanan lv.setLongClickable(true);). Dengan cara ini Anda dapat memiliki daftar dengan hanya beberapa item yang merespons klik panjang.

Semoga ini bisa membantu Anda.


25
Pastikan untuk menelepon lv.setLongClickable(true);juga.
Chris Lacy

15
Ini tidak berhasil untuk saya. Tapi ini tidak:lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {...
Luis A. Florit

entah bagaimana adroid: longClickable = "true" adalah default. Saya menggunakan API 19. Jadi saya tidak perlu menentukannya sama sekali.
user1592714

2
Android menetapkan longClickable = true saat mengatur pendengar.
Steven Spungin

nilai apa yang disimpan dalam id panjang? di boolean publik onItemLongClick (AdapterView <?> arg0, Lihat arg1, int pos, id panjang
Femn Dharamshi

26

Jika item baris ListView Anda merujuk ke file XML yang terpisah, pastikan untuk menambahkan android:longClickable="true"file tata letak itu selain pengaturan setOnItemLongClickListener()ke ListView Anda.


Terima kasih! Memukul kepalaku dengan yang ini.
Shaihi

15

atau coba kode ini:

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

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

    Toast.makeText(list.this,myList.getItemAtPosition(index).toString(), Toast.LENGTH_LONG).show();
                return false;
            }
}); 

6

Saya pikir kode di atas ini akan berfungsi pada LongKlik daftar tampilan, bukan item individual.

mengapa tidak digunakan registerForContextMenu(listView) . dan kemudian mendapatkan panggilan balik di OnCreateContextMenu.

Untuk sebagian besar kasus penggunaan, ini akan berfungsi sama.


2

Di xml tambahkan

<ListView android:longClickable="true">

Dalam file java

lv.setLongClickable(true) 

coba setOnItemLongClickListener ini ()

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) {
                //final String category = "Position at : "+pos;
                final String category = ((TextView) view.findViewById(R.id.textView)).getText().toString();
                Toast.makeText(getActivity(),""+category,Toast.LENGTH_LONG).show();
                args = new Bundle();
                args.putString("category", category);
                return false;
            }
        });

1

ini seharusnya bekerja

ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                           int pos, long id) {
                // TODO Auto-generated method stub

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

                return true;
            }
        });

juga jangan lupa di xml Anda android:longClickable="true"atau jika Anda memiliki tampilan kustom tambahkan ini ke kelas tampilan kustom AndayouCustomView.setLongClickable(true);

di sini adalah output dari kode di atas masukkan deskripsi gambar di sini


1

Saya mencoba sebagian besar jawaban ini dan semuanya gagal untuk TextViews yang mengaktifkan tautan otomatis tetapi juga harus menggunakan pers lama di tempat yang sama!

Saya membuat kelas khusus yang berfungsi.

public class TextViewLinkLongPressUrl extends TextView {

    private boolean isLongClick = false;

    public TextViewLinkLongPressUrl(Context context) {
        super(context);
    }

    public TextViewLinkLongPressUrl(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TextViewLinkLongPressUrl(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(text, type);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_UP && isLongClick) {
            isLongClick = false;
            return false;
        }

        if (event.getAction() == MotionEvent.ACTION_UP) {
            isLongClick = false;
        }

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            isLongClick = false;
        }

        return super.onTouchEvent(event);
    }

    @Override
    public boolean performLongClick() {
        isLongClick = true;
        return super.performLongClick();
    }
}

0

Ini bekerja untuk saya untuk cardView dan akan bekerja sama untuk listview di dalam adaptor adaptor, dalam onBindViewHolder()fungsi

holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return false;
            }
        });

0

Jika Anda ingin melakukannya di adaptor, Anda cukup melakukan ini:

itemView.setOnLongClickListener(new View.OnLongClickListener()
        {
            @Override
            public boolean onLongClick(View v) {
                Toast.makeText(mContext, "Long pressed on item", Toast.LENGTH_SHORT).show();
            }
        });

0
    listView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        return false;
    }
});

Pasti berhasil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.