Event Handler Implementation using Anonymous Inner Class – ये Event Handling Mechanism काफी हद तक पिछले दोनों तरीकों का मिश्रण है। Event Handling का ये तरीका तब काफी उपयोगी साबित होता है जब प्रत्येक Listener में कोई ऐसी Functionality नहीं होती जिसे विभिन्न Event Source द्वारा Share किया जा सके।
नए Programmers के लिए इस तरीके से Setup किए गए Event Handler को समझना थोड़ा मुश्किल होता है, लेकिन वास्तव में ये तरीका बिल्कुल भी मुश्किल नहीं है। क्योंकि ये तरीका काफी हद तक Member Class व Interface Type दोनों तरीकों के मिश्रण से बना है।
इस तरीके में Event Source को Event Listener से Register करने के लिए अलग से Event Listener Class Define करके उसके नए Object के माध्यम से Event Source को Event Listener के साथ Register नहीं नहीं किया जाता, बल्कि Interface Type तरीके की तरह एक नई Anonymous Event Listener Class का Description Create करके Event Source को उसके एक नए Instance के साथ Register कर दिया जाता है।
इस तरीके को बेहतर तरीके से समझने के लिए हम हमारे Simple Calculator Example की Java File को निम्नानुसार Modify कर सकते हैं-
File Name: MainActivity.java
package com.bccfalna.arithmetic; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { EditText etFN; EditText etSN; TextView tvResult; double fn; double sn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Register Event Source with Anonymous View.OnClickListener Class findViewById(R.id.btnAdd).setOnClickListener( new View.OnClickListener() { public void onClick(View btnClicked) { etFN = (EditText) findViewById(R.id.etFN); etSN = (EditText) findViewById(R.id.etSN); tvResult = (TextView) findViewById(R.id.tvResult); fn = Double.parseDouble(etFN.getText().toString()); sn = Double.parseDouble(etSN.getText().toString()); tvResult.setText(String.valueOf(fn + sn)); } }); findViewById(R.id.btnSub).setOnClickListener( new View.OnClickListener() { public void onClick(View btnClicked) { etFN = (EditText) findViewById(R.id.etFN); etSN = (EditText) findViewById(R.id.etSN); tvResult = (TextView) findViewById(R.id.tvResult); fn = Double.parseDouble(etFN.getText().toString()); sn = Double.parseDouble(etSN.getText().toString()); tvResult.setText(String.valueOf(fn - sn)); } }); findViewById(R.id.btnMul).setOnClickListener( new View.OnClickListener() { public void onClick(View btnClicked) { etFN = (EditText) findViewById(R.id.etFN); etSN = (EditText) findViewById(R.id.etSN); tvResult = (TextView) findViewById(R.id.tvResult); fn = Double.parseDouble(etFN.getText().toString()); sn = Double.parseDouble(etSN.getText().toString()); tvResult.setText(String.valueOf(fn * sn)); } }); findViewById(R.id.btnDiv).setOnClickListener( new View.OnClickListener() { public void onClick(View btnClicked) { etFN = (EditText) findViewById(R.id.etFN); etSN = (EditText) findViewById(R.id.etSN); tvResult = (TextView) findViewById(R.id.tvResult); fn = Double.parseDouble(etFN.getText().toString()); sn = Double.parseDouble(etSN.getText().toString()); tvResult.setText(String.valueOf(fn / sn)); } }); findViewById(R.id.btnRem).setOnClickListener( new View.OnClickListener() { public void onClick(View btnClicked) { etFN = (EditText) findViewById(R.id.etFN); etSN = (EditText) findViewById(R.id.etSN); tvResult = (TextView) findViewById(R.id.tvResult); fn = Double.parseDouble(etFN.getText().toString()); sn = Double.parseDouble(etSN.getText().toString()); tvResult.setText(String.valueOf(fn % sn)); } }); } }
इस Modified Java File वाले Android App को Run करने पर भी हमें Exactly वही Output प्रापत होता है, जैसा पिछले दोनों Examples में प्राप्त हुआ था। अन्तर केवल इतना है कि इस Example के Event Handler Listener Class को अलग से Define करके उसके Object के माध्यम से Event Source को Event Listener के साथ Bind करने के स्थान पर हमने Event Handler Listener Class को एक Anonymous Class के रूप में Specify करके तुरन्त उसका एक Instance Create कर लिया और उसी Instance के माध्यम से Event Source को Listener Class के साथ Register कर दिया।
चूंकि यहां हम एक Anonymous Even Listener Class Define कर रहे हैं, इसलिए जैसे ही Event Source के साथ Anonymous Event Listener Class का Instance Bind होता है, Event Listener Class Inaccessible हो जाता है, परिणामस्वरूप Java का Automatic Garbage Collector उस Anonymous Class को Destroy करके उसके Resources को Free कर देता है।
इसीलिए प्रत्येक Button द्वारा Fire किए जाने वाले Click Event को Handle करने के लिए उसके साथ Anonymous Event Handler Listener Class को अलग से Specify किया गया है और हम देख सकते हैं कि Event Handling के इस तरीके में ढ़ेर सारे Common Program Logic Codes का Repetition हो रहा है जिससे न केवल Program की Size बढ़ रही है बल्कि साथ ही Program के Performance पर भी Negative Effect पड़ता है।
अत: इस तरीके को तभी Use करना उपयोगी होता है जबकि कई UI View Controls द्वारा किसी समान प्रकार के Operation को Perform करने के लिए समान प्रकार के Codes Execute करने की जरूरत न हो बल्कि ज्यादातर Event Source द्वारा Fire होने वाले Events के Response में Different Operations Perform करने हों।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Android in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Android in Hindi | Page: 628 | Format: PDF