অ্যান্ড্রয়েড: দীর্ঘ ক্লিকগুলি কেন একটি সাধারণ ক্লিককে ট্রিগার করে?


126

লম্বা ক্লিক এবং নিয়মিত ক্লিকের জন্য শ্রোতাদের সাথে আমার একটি তালিকাভিউ রয়েছে।

কেন, যখন আমি একটি তালিকা আইটেম দীর্ঘ টিপতাম, নিয়মিত ক্লিক ইভেন্টটিও ডাকা হয়?

বিভিন্ন ক্লিকের জন্য আমার দুটি পৃথক ফাংশন থাকা দরকার।

উত্তর:


284

ইভেন্ট শ্রোতাদের কাছ থেকে :

onLongClick () - আপনি ইভেন্টটি গ্রাস করেছেন কিনা এবং এটি আরও এগিয়ে নেওয়া উচিত নয় তা নির্দেশ করার জন্য এটি একটি বুলিয়ান দেয়। এটি হ'ল, আপনি ইভেন্টটি পরিচালনা করেছেন এবং এটি এখানেই থামানো উচিত; আপনি যদি এটি পরিচালনা না করে থাকেন এবং / অথবা ইভেন্টটি অন্য কোনও ক্লিক-শ্রোতার কাছে চালিয়ে যাওয়া উচিত তা মিথ্যা প্রত্যাবর্তন করুন।

আপনি কি নিজের trueথেকে ফিরে আসছেন onLongClick()এবং এখনও সাধারণ ক্লিক ইভেন্ট পাচ্ছেন?

যুক্ত করতে সম্পাদিত : একটি তালিকাভিউয়ের জন্য, আপনি ব্যবহার করতে পারেন OnItemLongClickListeneronItemLongClick()সেখানে ইঙ্গিত কিনা এটা ঘটনা খাওয়া একটি অনুরূপ বুলিয়ান ফেরত মান ব্যবহার করে।


1
myListView.setOnItemLongClickListener(this); বিকল্পটি সেট করার জন্য আপনাকে ফাংশনটি ওভাররাইড করতে হবে public boolean onItemLongClick(...)। এখানে আপনার কেবল প্রয়োজন return trueযা ইঙ্গিত দেয় যে লংক্লিক সক্রিয় ছিল এবং নিয়মিত ক্লিকের উপর ট্রিগার বাতিল করে দেবে। আপনি যদি মিথ্যা ফেরত দেন তবে এটি নিয়মিত ক্লিকটিকেও ট্রিগার করবে।
ব্র্যান্ডন

অন্যান্য পরিস্থিতি সম্পর্কে কী, যখন সেই অনুসারে ব্যবস্থা নিতে আমার দীর্ঘ ক্লিক এবং সাধারণ ক্লিকের মধ্যে পার্থক্য করা দরকার
মুহাম্মদ রেফায়াত

@ অরিচামিওন অনুরূপ ইস্যুটির জন্য আমি আপনার সমাধান চেষ্টা করেছি, কোনও ভাগ্য ছাড়াই। আমি এখানে অবস্থিত আপনি যে কোনও অন্তর্দৃষ্টি বা চিন্তা সরবরাহ করতে পারেন সেটির প্রশংসা করব: stackoverflow.com/questions/47783631/…
এজেডাব্লু

49

উত্তরটি সহজ শর্তে পুনরুদ্ধার করা:

প্রদত্ত:

@Override
public boolean onLongClick(View view) {

    return true; // or false
}
  • return trueমানে ইভেন্টটি গ্রাস হয়ে গেছে। এটি পরিচালনা করা হয়। অন্য কোনও ক্লিক ইভেন্টগুলিকে অবহিত করা হবে না।
  • return falseমানে ইভেন্টটি গ্রাস করা হয়নি। অন্য যে কোনও ক্লিক ইভেন্টগুলি বিজ্ঞপ্তিগুলি পাওয়া চালিয়ে যাবে।

সুতরাং আপনি যদি onClickএকটি পরেও ট্রিগার হতে না চান onLongClick, তবে আপনার উচিত ইভেন্টটি return trueথেকে onLongClick


2
সুপার নিখুঁত উত্তর যদি আমরা সত্যিকারের মান রাখি তবে এটি শুধুমাত্র দীর্ঘ ক্লিককে হ্যান্ডেল করে যদি আমরা মিথ্যা রাখি তবে ক্লিক এবং দীর্ঘ উভয় প্রেস ইভেন্ট একই সাথে ঘটে
পীর ফাহিম শাহ

দুর্দান্ত উত্তর।
স্যাম চেন

20

আপনি OnClickListenerআপনার onClickপদ্ধতির জন্য ওভাররাইড করছেন তা নিশ্চিত করুন । এছাড়াও আপনি OnLongClickListenerআপনার onLongClickপদ্ধতির জন্য ওভাররাইড করছেন তা নিশ্চিত করুন । এবং নিশ্চিত হয়ে নিন যে আপনার onLongClickপদ্ধতিটি ফিরে trueআসবে, কারণ এটি গ্রাস করবে onClick


আমি আমার অনক্লিক পদ্ধতিতে সত্য যুক্ত করেছি তবে এখনও আমার একটি সমস্যা আছে যে আমার অনক্লিক পদ্ধতিটি এর পরে আগুন না দেয়। আমি এখানে অবস্থিত কীভাবে সমাধান করব সে সম্পর্কে যে কোনও ধারণা বা ধারণাগুলির প্রশংসা করব: stackoverflow.com/questions/47783631/…
এজেডাব্লু

0

আপনি setOnLongClickListenerউদাহরণস্বরূপ তৈরিটি বাস্তবায়ন করতে পারেন new View.OnClickListener()বা new View.OnLongClickListener(), আপনি যদি দীর্ঘ ক্লিক তৈরি করেন এবং একটি সাধারণ অনক্লিকলিস্টনার প্রয়োগ করেন তবে আপনি একক ক্লিকের এই ত্রুটিটি পদ্ধতিটি সক্রিয় করতে পারবেন। আপনার new View.OnLongClickListener()কেবলমাত্র দীর্ঘ ক্লিকগুলি ধরার জন্য ব্যবহার করা উচিত

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