একটি অনক্লিক শ্রোতা সরান


194

আমার একটি অবজেক্ট রয়েছে যেখানে পাঠ্যটি চক্র করে এবং স্থিতি বার্তাগুলি প্রদর্শন করে। বার্তাগুলি পরিবর্তন হলে, আমি বার্তাটির সাথে সম্পর্কিত যে ক্রিয়াকলাপে আপনাকে নিয়ে যেতে চাইছে সেই অবজেক্টের ক্লিক ইভেন্টটি পরিবর্তন হোক want

সুতরাং, আমার কাছে একটি আছে TextView mTitleViewএবং আমি ইভেন্টটি এইভাবে নির্ধারণ করছি।

public void setOnTitleClickListener(OnClickListener listener) {
    mTitleView.setOnClickListener(listener);
}

আমি কীভাবে ক্লিক ইভেন্টটি সরিয়ে দেব? কিছু স্থিতি বার্তাগুলি রয়েছে যেগুলির কোনও ক্রিয়াযোগ্য অঞ্চল নেই তাই আমি ক্লিক ইভেন্টটি বন্ধ করতে চাই। আমি এই ক্লিক ইভেন্টগুলির মধ্যে চক্রে সক্ষম হতে এবং সেগুলি সঠিকভাবে নিষ্পত্তি করতে সক্ষম হতে চাই, তবে আমি সেরা অনুশীলনের বিষয়ে অনিশ্চিত।

উত্তর:


416

mTitleView.setOnClickListener(null) কৌতুক করা উচিত।

আরও ভাল নকশা হ'ল অনক্লিকলিস্টনারের স্থিতির একটি চেক করা এবং তারপরে ক্লিক শ্রোতাদের যোগ এবং ক্লিয়ারিং বনাম ক্লিক কিছু করা উচিত কিনা তা নির্ধারণ করে।


1
ইভেন্টটি নিবন্ধন করতে আমার আর কোন ক্লিনআপ করতে হচ্ছে না?
জোশ

2
নাঃ। শ্রোতা কেবলমাত্র একটি অবজেক্ট যা আপনি যখন ক্লিক করেন তখন ভিউটি কোনও পদ্ধতিতে কল করতে ব্যবহার করে যখন আপনি এটি বাতিল করে দিলে এটি একে ধ্বংস করে দেয়।
রবি পুকুর

15
আমি ভাবছি শ্রোতা যদি মেমরি বরাদ্দ দেয়? আমাদের কি তাদের মুক্ত করতে হবে? এটি কি অ্যাপের কর্মক্ষমতা বাড়িয়ে তুলবে?
এলিকানবাতুর

1
আপনার উত্তরের জন্য ধন্যবাদ, আপনি কেন মনে করেন শ্রোতার স্থিতি বা পতাকা উত্তোলন করা ভাল adding
kapv89

2
আপনি যখন বলছেন a better designআপনি পারফরম্যান্সের অন্তর্নিহিত করছেন বা আপনি কি বলছেন এটি কিছুটা বিরক্তিজনক?
আরটিএফ

132

মনে রাখবেন যে কোনও ভিউ যদি ক্লিকযোগ্য না হয় (উদাহরণস্বরূপ একটি পাঠ্যদর্শন), সেটিংয়ের setOnClickListener(null)অর্থ ভিউটি ক্লিকযোগ্য। mMyView.setClickable(false)আপনি যদি না চান যে আপনার দর্শন ক্লিকযোগ্য হয় Use উদাহরণস্বরূপ, আপনি যদি ব্যাকগ্রাউন্ডের জন্য একটি এক্সএমএল অঙ্কনযোগ্য ব্যবহার করেন, যা বিভিন্ন রাজ্যের জন্য বিভিন্ন রঙ দেখায়, যদি আপনার দৃষ্টিভঙ্গি এখনও ক্লিকযোগ্য হয় তবে ব্যবহারকারীরা এটিতে ক্লিক করতে পারেন এবং ভিন্ন পটভূমির রঙ প্রদর্শিত হবে, যা দেখতে অদ্ভুত দেখাচ্ছে look


এটি টেক্সটভিউ এবং এর জন্য জানা ভাল, তবে একটি তালিকাভিউয়ের জন্য যখন কোনও অনক্লিকলিস্টনার আগে সেট করা হয়েছিল তখন এর কোনও প্রভাব নেই।
কেউ কোথাও

4
এ কারণেই আমি লিখেছি "দ্রষ্টব্য যে কোনও ভিউ যদি ক্লিকযোগ্য না হয় (উদাহরণস্বরূপ একটি পাঠ্যদর্শন)" - একটি তালিকাভিউ ক্লিকযোগ্য এবং তাই এটি এটির জন্য কার্যকর হয় না।
ফ্রিওয়েলনাট

আমার মতে ভিউ-অন ক্লিকক্লিশজনকে অক্ষম / সক্ষম করতে যদি আমাদের পিছনে পিছনে স্যুইচ করতে হয় তবে আমার মতে এটি সেটঅনক্লিকলিস্টার (নাল) সেট করার চেয়ে ভাল সমাধান।
পানিনি লুঞ্চার

1
view.setOnClickListener (নাল) একসাথে view.setClickable (মিথ্যা) সঠিক উত্তর, ধন্যবাদ !!!!
পেট্রোস মাস্টারানটোনাস

12

সম্ভবত setOnClickListener(null)?


1
এটি বিশেষত চেকবক্সগুলির জন্য কাজ করে না এবং সম্ভবত অন্যান্য উইজেটগুলির জন্যও কাজ করবে না।
ক্রিস

8

setOnClickListener(null)রানটাইমের সময় ক্লিক শ্রোতাদের অপসারণ করার জন্য সেট করা ভাল ধারণা।

এবং কেউ মন্তব্য করেছেন যে এর View.hasOnClickListeners()পরে কল করা ফিরে আসবে true, না আমার বন্ধু।

এখানে ক্লাস hasOnClickListeners()থেকে নেওয়া বাস্তবায়নandroid.view.View

 public boolean hasOnClickListeners() {
        ListenerInfo li = mListenerInfo;
        return (li != null && li.mOnClickListener != null);
    }

সৃষ্টিকর্তাকে ধন্যবাদ. এটা তোলে পরীক্ষা null

তাই সবকিছুই নিরাপদ। উপভোগ করুন :-)


4

উপরের উত্তরগুলি উড়ন্ত এবং অবিশ্বস্ত বলে মনে হচ্ছে। আমি একটি সাধারণ আপেক্ষিক লেআউটে একটি চিত্রভিউ দিয়ে এটি করার চেষ্টা করেছি এবং এটি অনক্লিক ইভেন্টটি অক্ষম করে নি।

আমার জন্য কী কাজ করেছিল সেটি সেটএবলড ব্যবহার করা হয়েছিল।

ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);

তারপরে আপনি দেখতে সক্ষম করেছেন কিনা তা পরীক্ষা করে দেখতে পারেন:

boolean ImageView.isEnabled();

আর একটি বিকল্প হল দৃশ্যের স্থিতি নির্ধারণের জন্য সেটকন্টেন্টডেস্ক্রিপ্ট (স্ট্রিং স্ট্রিং) এবং স্ট্রিং গেটকন্টেন্টডেস্ক্রিপশন () ব্যবহার করা।



3
    /**
 * Remove an onclick listener
 *
 * @param view
 * @author malin.myemail@gmail.com
 * @website https://github.com/androidmalin
 * @data 2016-05-16
 */
public static void unBingListener(View view) {
    if (view != null) {
        try {
            if (view.hasOnClickListeners()) {
                view.setOnClickListener(null);

            }

            if (view.getOnFocusChangeListener() != null) {
                view.setOnFocusChangeListener(null);

            }

            if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
                ViewGroup viewGroup = (ViewGroup) view;
                int viewGroupChildCount = viewGroup.getChildCount();
                for (int i = 0; i < viewGroupChildCount; i++) {
                    unBingListener(viewGroup.getChildAt(i));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

0

নীচের মতো কেবল আইটেমটি পুনরায় পুনর্নির্মাণ করা কৌশলটি করবে। এটি আইটেমের উপর ভিত্তি করে অনক্লিক, অনলংলিক, অনাইটম্লিক্লিক, অনাইটেলমঙ্গক্লিকাকে সরিয়ে ফেলবে

এমটিটলিভিউ = সন্ধান ভিউআইআইডি (আর.আইডি.এমটিটলভিউ);

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