অনেক বোতামের জন্য অনক্লিকলিস্টনার ইন্টারফেস বাস্তবায়নের সঠিক উপায় কী


10

আমার অ্যান্ড্রয়েড ক্রিয়াকলাপে একাধিক বোতাম রয়েছে যার জন্য একটি অনক্লিকলিস্টনার প্রয়োজন। আমি এটি করার বিভিন্ন উপায় দেখেছি যেমন ::

  • ক্রিয়াকলাপ শ্রেণিতে ইন্টারফেস প্রয়োগ করা
  • ইন্টারফেস প্রয়োগ করে এমন একটি পৃথক শ্রেণি তৈরি করা
  • প্রতিটি বোতামের জন্য একটি বেনামে অভ্যন্তরীণ শ্রেণীর সংজ্ঞা দেওয়া হচ্ছে।

আমি প্রতিটি পদ্ধতির অনেক উদাহরণ দেখেছি। তবে এটি কেন আমার কাছে পরিষ্কার নয় যে কেন একটি পদ্ধতির পরিবর্তে অন্যের ব্যবহার করা হবে। এই পদ্ধতির মধ্যে পার্থক্য কি স্টাইলিস্টিক বা এমন কোনও কারণ রয়েছে যা একটি পদ্ধতির উন্নত করে?

উত্তর:


6

অনেক কিছুর মতোই, সঠিক পদ্ধতির উপর নির্ভর করে আপনি নির্দিষ্ট বোতামটির জন্য কী করতে চাচ্ছেন এবং কার্যকলাপের সাথে আপনি কী করছেন on

ক্রিয়াকলাপ শ্রেণি ইন্টারফেস প্রয়োগ করে :
যখন আপনার শ্রোতা বলা হয় তখন কেবলমাত্র এক ধরণের টাস্ক কার্যকর করতে হবে। এর উদাহরণ হ'ল বেশ কয়েকটি ক্ষেত্র এবং একটি সংরক্ষণ বোতাম সহ একটি সাধারণ ফর্ম। আমার ইভেন্ট শ্রোতারা আসলে কী করা দরকার তা স্থির করার জন্য ইভেন্টের উত্সটি পরীক্ষা না করাই পছন্দ করি। আমি জানি যে কেউ কেউ বলতে পারে এটি একটি স্টাইলের জিনিস, তবে আমি বিশ্বাস করি যে শ্রোতাদের এই চেকটি করার প্রয়োজন না হওয়ার ফলে কোডটি অনুসরণ করা সহজ হয় কারণ আপনি প্রতিটি ইভেন্টের জন্য কী আহ্বান করা হচ্ছে তা ঠিক বুঝতে পারবেন।

একটি পৃথক শ্রেণি ইন্টারফেস প্রয়োগ করে :
যেমন আমি উপরে বলেছি, যখন আমার কাছে একাধিক আইটেম রয়েছে যা একই ইভেন্টটিকে আগুন ধরিয়ে দিতে পারে তখন আমি এই বিকল্পটি পছন্দ করি। উপরের উদাহরণটি প্রসারিত করে একটি ক্লিয়ার বোতাম যুক্ত করতে দেওয়া যাক এর জন্য ক্লিক শ্রোতারও দরকার। এমন শ্রোতা তৈরি করুন যা সেভ ক্রিয়াকলাপগুলিকে অগ্রাহ্য করে এবং স্পষ্ট ক্রিয়াকলাপগুলিকে অগ্রাহ্য করে। প্রতিটি শ্রোতা কেবল সেই উপাদানগুলিতে যুক্ত হয় যা সেই ক্রিয়াটি উত্পাদন করে।

এই বাস্তবায়নের একটি অতিরিক্ত সুবিধা রয়েছে যা আপনি যদি যত্ন নেন তবে আপনি এটি ব্যবহার করতে পারেন। সুবিধাটি হ'ল এটি আপনার ক্রিয়াকলাপ শ্রেণীর অভ্যন্তরে ইভেন্টটিকে ট্রিগার করা থেকে অন্য শ্রেণিকে বাধা দেয়। যেহেতু ইন্টারফেস পদ্ধতিটি অবশ্যই সর্বজনীন হতে পারে, ক্লাসের সাথে কোনও রেফারেন্স সহ যে কেউ ইভেন্টটি চালিয়ে দিতে পারে। অ্যাপ্লিকেশনটিতে কে কী করতে পারে তার উপর আপনি যদি সূক্ষ্ম গ্রেড কন্ট্রোল চান তবে একটি পৃথক শ্রেণি ক্রিয়াকলাপের সাথে রেফারেন্স সহ যে কাউকে আপনার ফর্মটি সাফ বা সংরক্ষণ করতে ট্রিগার করতে বাধা দেয় (বা যদি শ্রোতা উত্সটি ব্যবহার করে তবে সম্ভবত কোডটি ভঙ্গ করে তবে তা করে খারাপ ইনপুট পরিচালনা করবেন না)।

একটি বেনামি অভ্যন্তর শ্রেণি ইন্টারফেস প্রয়োগ করে :
বাস্তবায়ন হিসাবে এটি বিভিন্ন শ্রেণীর ব্যবহারের দ্বিতীয় বিকল্পটি নির্মাণের সত্যিই কেবল একটি নির্দিষ্ট উপায়। এই বিকল্পটি ইভেন্টটিকে ট্রিগার করতে কার অ্যাক্সেস রয়েছে তা আরও সীমাবদ্ধ করতে পারে কারণ অন্য কেউ শ্রেণীর উদাহরণ তৈরি করতে পারে না। তবে আমি মনে করি যে দুটি বিকল্পের মধ্যে আরও গুরুত্বপূর্ণ ফ্যাক্টরটি হ'ল কত কাজ হচ্ছে। কয়েকটি পাঠ্য ক্ষেত্র সাফ করা একটি সহজ এবং সোজা ফরোয়ার্ড অপারেশন। তবে এর জন্য সংরক্ষণের প্রক্রিয়াটি বেশ কয়েকটি কাজের সাথে জড়িত হতে পারে আপনি হ'ল ইনপুটটি যাচাই করছেন (যা আপনার করা উচিত ছিল), মানগুলি সংরক্ষণ করার জন্য একটি ডাটাবেজে লিখে এবং কিছু পোস্ট সেভ ক্রিয়াকে ট্রিগার করে। এই ক্ষেত্রে, নিজস্ব ফাইলের সাথে একটি পৃথক শ্রেণি তৈরি করা ইনপুট ফর্ম এবং ডেটা প্রসেসিংয়ের মধ্যে আরও স্পষ্ট বিভাজন সরবরাহ করবে। এর ফলে ফর্ম কোডটি বৃহত্তর ফাইলের পরিবর্তে একাধিক অভ্যন্তর শ্রেণীর অভ্যন্তরে বাসা বাঁধে keeps


বাহ, আপনার প্রতিক্রিয়া জন্য ধন্যবাদ। ওভারহেডের ক্ষেত্রে, একাধিক শ্রোতার ক্লাস তৈরি করা কি আরও ব্যয়বহুল?
স্লেটন

@ স্লেটন: আপনি যা কিছু করেন না কেন সর্বদা ব্যয় হবে। প্রশ্নটি হওয়া উচিত "আপনার কাছে পার্থক্য কী গুরুত্বপূর্ণ?" আরও অবজেক্ট তৈরি করার একটি ওজন রয়েছে, তবে আপনার শ্রোতাকে আসলে কী করবেন তা সিদ্ধান্ত নেওয়ার জন্য উত্সের একটি তালিকা দিয়ে যেতে হয় তবে মৃত্যুদন্ড কার্যকর করার সময় আরও বেশি হবে। যদি মেমরির ব্যবহার এবং কার্য সম্পাদন আপনার পক্ষে গুরুত্বপূর্ণ হয় তবে আপনার কোডটি প্রোফাইল করা উচিত এবং আপনার প্রয়োজনীয়তার ভিত্তিতে কোনটি সেরা তা সিদ্ধান্ত নেওয়া উচিত। তবে আমি সন্দেহ করব যে এটি আপনার কোডের বোতল ঘাড় হবে। অন্যথায় না দেখানো পর্যন্ত আপনার সিদ্ধান্তগুলি কোডকে আরও পরিষ্কার এবং আরও সুসংহত করে দিন।
unholysampler

3

চতুর্থ উপায় হ'ল লেআউটে অনক্লিক বৈশিষ্ট্য সেট করা:

<Button android:onClick="clickHandlerForButtonX" />

ক্রিয়াকলাপে যার সাথে এটি সম্পর্কিত পদ্ধতি রয়েছে:

public void clickHandlerForButtonX(View v) {
    //Handle Button X here
}

আকর্ষণীয়, আমি জানতাম না যে আপনি এটি করতে পারেন। যদিও এটি বোতাম ক্লিকগুলির সাথে কাজ করার একটি অ্যান্ড্রয়েড নির্দিষ্ট প্রক্রিয়া বলে মনে হচ্ছে।
স্লেটন

আমি সাধারণত "ক্রিয়াকলাপ শ্রেণি প্রয়োগকারী ইন্টারফেস" নিয়ে যাই, যদিও - সেই পথে আপনার কাছে ক্লিকের সাথে সম্পর্কিত সমস্ত জিনিস একই জায়গায় রয়েছে।
orjan

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