कैसे एक सूची पर एक लंबी क्लिक श्रोता को लागू करने के लिए


148

मैं OnLongClickListenerअपनी सूची दृश्य में जोड़ना चाहता हूं। जब भी उपयोगकर्ता सूची में आइटम को लंबे समय तक दबाए रखता है तो कुछ कार्रवाई की जानी चाहिए, लेकिन मेरा कोड इस श्रोता को नहीं पकड़ता है। कृपया मुझे बताएं कि मैं कहां गलत हूं। समान कोड setOnItemClickListenerबहुत अच्छी तरह से काम करता है ।

यहाँ कोड है:

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

क्या आपने अपनी कक्षा की घोषणा में "लागू किए गए OnItemLongClickListener" को याद किया है?
बैरी

xml में देखें कि क्या लंबी क्लिक सक्षम है?
Android

हो सकता है कि आपके पास जेस्चर लिसनर या ऐसा कुछ हो जो लंबे प्रेस को कैप्चर कर रहा हो और उसका उपभोग कर रहा हो।
जॉन जंजीतु

जवाबों:


317

आपको सूची दृश्य में setOnItemLongClickListener () सेट करना होगा :

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

सूची में प्रत्येक आइटम के लिए एक्सएमएल (आपको एक कस्टम एक्सएमएल का उपयोग करना चाहिए) के पास भी होना चाहिए android:longClickable="true"(या आप सुविधा विधि का उपयोग कर सकते हैंlv.setLongClickable(true); )। इस तरह से आप केवल कुछ वस्तुओं के साथ एक सूची रख सकते हैं जो लॉन्गक्लिक का जवाब दे रही है।

आशा है कि यह आपकी मदद करेगा।


25
फोन lv.setLongClickable(true);भी अवश्य करें ।
क्रिस लैसी

15
यह मेरे लिए काम नहीं किया। लेकिन यह करता है:lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {...
लुइस ए। फ्लोरिट

किसी भी तरह adroid: longClickable = "सही" डिफ़ॉल्ट है। मैं एपीआई 19 का उपयोग कर रहा हूं। इसलिए मुझे इसे निर्दिष्ट करने की आवश्यकता नहीं थी।
user1592714

2
Android श्रोता को सेट करते समय longClickable = true सेट करता है।
स्टीवन स्पुंगिन

लंबी आईडी में क्या मूल्य संग्रहीत किया जाता है? सार्वजनिक बूलियन onItemLongClick में (AdapterView arg0, देखें ARG1, पूर्णांक स्थिति, लंबे आईडी <?>
FeMn Dharamshi

26

यदि आपकी ListView पंक्ति वस्तु एक अलग XML फ़ाइल को संदर्भित करती है, तो अपने ListView android:longClickable="true"को सेट setOnItemLongClickListener()करने के अलावा उस लेआउट फ़ाइल में जोड़ना सुनिश्चित करें ।


धन्यवाद! इस एक के साथ मेरा सिर पीट रहा था।
Shaihi

15

या इस कोड को आज़माएं:

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

मुझे लगता है कि यह उपरोक्त कोड लिस्टव्यू पर काम करेगा, न कि व्यक्तिगत वस्तुओं पर।

क्यों नहीं उपयोग करें registerForContextMenu(listView) । और फिर OnCreateContextMenu में कॉलबैक प्राप्त करें।

अधिकांश उपयोग के मामलों के लिए यह समान काम करेगा।


2

Xml ऐड में

<ListView android:longClickable="true">

जावा फ़ाइल में

lv.setLongClickable(true) 

इस सेट को आज़माएँ। ItememLongClickListener ()

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

यह काम करना चाहिए

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

अपने xml में भी मत भूलना android:longClickable="true"या यदि आपके पास कोई कस्टम दृश्य है तो इसे अपने कस्टम दृश्य वर्ग में जोड़ेंyouCustomView.setLongClickable(true);

यहाँ ऊपर कोड का आउटपुट है यहाँ छवि विवरण दर्ज करें


1

मैंने इनमें से अधिकांश उत्तरों की कोशिश की और वे सभी TextViews के लिए असफल हो रहे थे जिनमें ऑटोलिंक सक्षम था, लेकिन उसी स्थान पर लंबे प्रेस का भी उपयोग करना था!

मैंने एक कस्टम क्लास बनाया जो काम करता है।

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

यह मेरे लिए cardView के लिए काम करता है और onBindViewHolder()फ़ंक्शन के अंदर एडॉप्टर calss के अंदर सूची के लिए समान काम करेगा

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

0

यदि आप इसे एडॉप्टर में करना चाहते हैं, तो आप बस ऐसा कर सकते हैं:

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

निश्चित रूप से चाल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.