liste görünümünde uzun tıklama dinleyicisini uygulama


148

OnLongClickListenerListe görünümüme eklemek istiyorum . Kullanıcı listedeki öğeye uzun bastığında bazı eylemler gerçekleştirilmelidir, Ancak kodum bu dinleyiciyi yakalamıyor. Lütfen nerede yanlış yaptığımı bana bildirin. Benzer kod setOnItemClickListenerçok iyi çalışıyor .

İşte kod:

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

Sınıf beyanınıza "implements OnItemLongClickListener" eklemeyi hatırladınız mı?
barry

uzun tıklama etkin olup olmadığını xml bakın?
Android ile hayatı

Belki de uzun basın yakalayan ve tüketen bir Hareket Dinleyiciniz veya bunun gibi bir şey var.
Jon Zangitu

Yanıtlar:


317

ListView içinde setOnItemLongClickListener () ayarlamanız gerekir :

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

Listedeki her öğe için XML (özel bir XML kullanmanız gerekiyorsa) da olmalıdır android:longClickable="true"(veya kolaylık yöntemini kullanabilirsiniz lv.setLongClickable(true);). Bu şekilde, yalnızca bazı öğelerin longclick'e yanıt verdiği bir liste oluşturabilirsiniz.

Umarım bu size yardımcı olacaktır.


25
lv.setLongClickable(true);Ayrıca aradığınızdan emin olun .
Chris Lacy

15
Bu benim için işe yaramadı. Ancak bu:lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {...
Luis A. Florit

bir şekilde adroid: longClickable = "true" varsayılan değerdir. API 19 kullanıyorum. Bu yüzden hiç belirtmem gerekmedi.
user1592714

2
Android, dinleyiciyi ayarlarken longClickable = true değerini ayarlar.
Steven Spungin

uzun kimlikte hangi değer saklanır? açık boolean onItemLongClick (AdapterView <?> arg0, Görünüm arg1, int pos, uzun id
Femn Dharamshi

26

ListView satır öğeniz ayrı bir XML dosyasına atıfta bulunuyorsa, ListView android:longClickable="true"ayarınıza ek olarak bu mizanpaj dosyasına da eklemeyi setOnItemLongClickListener()unutmayın.


Teşekkürler! Bu ile başımı beceriyor.
Shaihi

15

veya şu kodu deneyin:

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

Yukarıdaki kod LongClicking liste görünümü üzerinde çalışacağını düşünüyorum, tek tek öğeleri.

neden kullanmıyorsunuz registerForContextMenu(listView). ve OnCreateContextMenu'da geri aramayı alın.

Çoğu kullanım durumunda bu aynı şekilde çalışır.


2

Xml'de ekle

<ListView android:longClickable="true">

Java dosyasında

lv.setLongClickable(true) 

bu setOnItemLongClickListener () yöntemini deneyin

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

bu çalışmalı

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

Ayrıca xml'nizde de unutmayın android:longClickable="true"veya özel bir görünümünüz varsa bunu özel görünüm sınıfınıza ekleyinyouCustomView.setLongClickable(true);

yukarıdaki kodun çıktısı resim açıklamasını buraya girin


1

Bu cevapların çoğunu denedim ve hepsi otomatik bağlantı etkin ancak aynı zamanda uzun basın kullanmak zorunda kaldı TextViews için başarısız oldu!

İşe yarayan özel bir sınıf yaptım.

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

Bu benim için cardView için çalıştı ve aynı onBindViewHolder()işlev içinde adaptör calss içinde listview için çalışacaktır

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

0

Bağdaştırıcıda yapmak istiyorsanız, bunu yapabilirsiniz:

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

Kesinlikle hile yapar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.