কীভাবে একটি লিস্টভিউতে দীর্ঘ ক্লিক শ্রোতার প্রয়োগ করা যায়


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

আপনি কি আপনার শ্রেণির ঘোষণায় "প্রয়োগগুলি অনআইটেমলং ক্লিকলিস্টার" যুক্ত করার কথা মনে রেখেছেন?
ব্যারি

এক্সএমএলে দেখুন লম্বা ক্লিক সক্ষম কিনা?
অ্যান্ড্রয়েড

হতে পারে আপনার কোনও অঙ্গভঙ্গি শ্রোতা বা এর মতো কিছু রয়েছে যা দীর্ঘ প্রেসটি ক্যাপচার করছে এবং গ্রাস করছে।
জন জাঙ্গিতু

উত্তর:


317

আপনাকে তালিকাভিউতে সেটঅনটাইমলং ক্লিকক্লিকলিস্টার () সেট করতে হবে :

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() {...
লুইস এ ফ্লোরিট

কোনওভাবে অ্যাড্রয়েড: দীর্ঘ ক্লিকযোগ্য = "সত্য" ডিফল্ট। আমি এপিআই 19 ব্যবহার করছি So সুতরাং আমার এটিকে মোটেও নির্দিষ্ট করার দরকার নেই।
ব্যবহারকারী 1592714

2
অ্যান্ড্রয়েড শ্রোতাদের সেট করার সময় দীর্ঘ ক্লিকযোগ্য = সত্য সেট করে sets
স্টিভেন স্পঞ্জিন

লং আইডিতে কোন মান সংরক্ষণ করা হয়? আইটিমলং ক্লিক ক্লিক করুন (অ্যাডাপ্টারভিউ <?> আরগ0, দেখুন আরজি 1, ইন পোস্ট, লং আইডি
ফেমন ধর্মশী 26:18

26

যদি আপনার তালিকাভিউ সারি আইটেমটি একটি পৃথক এক্সএমএল ফাইলকে বোঝায়, তবে আপনার তালিকাভিউতে android:longClickable="true"সেটিংস ছাড়াও সেই লেআউট ফাইলটিতে যুক্ত করতে ভুলবেন না setOnItemLongClickListener()


ধন্যবাদ! এই এক দিয়ে আমার মাথা বেঁধে ছিল।
শাইহি

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)। এবং তারপরে অনক্রিয়েট কনটেক্সটমেনুতে কলব্যাক পান।

বেশিরভাগ ব্যবহারের ক্ষেত্রে এটি একই কাজ করবে।


2

এক্সএমএল যোগ করুন

<ListView android:longClickable="true">

জাভা ফাইলে

lv.setLongClickable(true) 

এই সেটটি চেষ্টা করুনঅ্যান্টেমলং ক্লিকক্লিজলিস্টার ()

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

আপনার এক্সএমএল android:longClickable="true"বা আপনার কাস্টম ভিউ থাকলে এটি আপনার কাস্টম ভিউ ক্লাসে যুক্ত করতে ভুলবেন না youCustomView.setLongClickable(true);

এখানে উপরের কোড আউটপুট এখানে চিত্র বর্ণনা লিখুন


1

আমি এই উত্তরগুলির বেশিরভাগটি চেষ্টা করেছিলাম এবং সেগুলি টেক্সটভিউগুলির জন্য ব্যর্থ হয়েছিল যেগুলি অটলিংক সক্ষম করেছিল তবে একই জায়গায় দীর্ঘ প্রেস ব্যবহার করতে হয়েছিল!

আমি একটি কাস্টম ক্লাস তৈরি করেছি যা কাজ করে।

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

এটি কার্ডভিউয়ের জন্য আমার পক্ষে কাজ করেছে এবং onBindViewHolder()ফাংশনের মধ্যে অ্যাডাপ্টার ক্যালাসের ভিতরে তালিকার জন্য একই কাজ করবে

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

নিশ্চয়ই কৌতুক করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.