Android
मक्खन काटने की छुरी
खोज…
परिचय
बटरकाइफ़ एक बाइंडिंग टूल है जो हमारे लिए बॉयलरप्लेट कोड उत्पन्न करने के लिए एनोटेशन का उपयोग करता है। यह उपकरण स्क्वायर में जेक व्हार्टन द्वारा विकसित किया गया है और अनिवार्य रूप से कोड के दोहराए जाने वाले लाइनों को findViewById(R.id.view)
लिए उपयोग किया जाता है, जैसे findViewById(R.id.view)
जब विचारों से निपटते हैं तो इस तरह से हमारे कोड को बहुत साफ दिखता है।
स्पष्ट होने के लिए, बटरकाइफ़ एक निर्भरता इंजेक्शन लाइब्रेरी नहीं है । बटरकैंफ संकलन समय पर कोड इंजेक्ट करता है। यह एंड्रॉइड एनोटेशन द्वारा किए गए कार्य के समान है।
टिप्पणियों
मक्खन काटने की छुरी
एंड्रॉइड विचारों के लिए फ़ील्ड और विधि बाध्यकारी जो आपके लिए बॉयलरप्लेट कोड उत्पन्न करने के लिए एनोटेशन प्रसंस्करण का उपयोग करता है।
- खेतों पर @BindView का उपयोग करके findViewById कॉल को हटा दें।
- एक सूची या सरणी में एकाधिक दृश्य समूह। उन सभी पर एक बार कार्रवाई, बसने या गुणों के साथ काम करें।
- @OnClick और अन्य के साथ तरीकों की व्याख्या करके श्रोताओं के लिए अनाम आंतरिक-वर्गों को हटा दें।
- खेतों पर संसाधन एनोटेशन का उपयोग करके संसाधन लुकअप को हटा दें।
अधिक जानकारी: http://jakewharton.github.io/butterknife/
लाइसेंस
कॉपीराइट 2013 जेक व्हार्टन
अपाचे लाइसेंस के तहत लाइसेंस प्राप्त, संस्करण 2.0 ("लाइसेंस"); आप लाइसेंस के अनुपालन के अलावा इस फ़ाइल का उपयोग नहीं कर सकते हैं। आप लाइसेंस की एक प्रति प्राप्त कर सकते हैं
http://www.apache.org/licenses/LICENSE-2.0
जब तक लागू कानून की आवश्यकता नहीं होती है या लिखित रूप में सहमति नहीं होती है, लाइसेंस के तहत वितरित सॉफ़्टवेयर "AS IS" आधार पर वितरित किया जाता है, बिना किसी प्रकार के वारंटी या शर्तों के, या तो व्यक्त या निहित है। लाइसेंस के तहत अनुमतियों और सीमाओं को नियंत्रित करने वाली विशिष्ट भाषा के लिए लाइसेंस देखें।
अपने प्रोजेक्ट में ButterKnife कॉन्फ़िगर करना
android-apt
plugin को शामिल करने के लिए अपने प्रोजेक्ट-स्तर build.gradle
को कॉन्फ़िगर करें:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
}
फिर, अपने मॉड्यूल-लेवल build.gradle
में android-apt
प्लगइन लागू करें और ButterKnife निर्भरता जोड़ें:
apply plugin: 'android-apt'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
नोट: यदि आप संस्करण 2.2.0 या नए के साथ नए जैक संकलक का उपयोग कर रहे हैं, तो आप की जरूरत नहीं है android-apt
प्लगइन और बदले के साथ उपयुक्त जगह ले सकता है annotationProcessor
जब संकलक निर्भरता की घोषणा।
बटरकनी एनोटेशन का उपयोग करने के लिए आपको उन्हें अपनी गतिविधियों के onCreateView()
या अपने Fragments के onCreateView onCreate()
में बाँधने के बारे में नहीं भूलना चाहिए:
class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Binding annotations
ButterKnife.bind(this);
// ...
}
}
// Or
class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(getContentView(), container, false);
// Binding annotations
ButterKnife.bind(this, view);
// ...
return view;
}
}
विकास संस्करण के स्नैपशॉट सोनाटाइप के स्नैपशॉट रिपॉजिटरी में उपलब्ध हैं।
नीचे एक पुस्तकालय परियोजना में बटरकनीफ का उपयोग करने के लिए अतिरिक्त कदम उठाने होंगे
किसी लाइब्रेरी प्रोजेक्ट में ButterKnife का उपयोग करने के लिए, अपने प्रोजेक्ट-स्तर build.gradle
में प्लगइन जोड़ें:
buildscript {
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
}
… और फिर अपने पुस्तकालय-स्तर build.gradle
के शीर्ष पर इन पंक्तियों को जोड़कर अपने मॉड्यूल पर लागू करें:
apply plugin: 'com.android.library'
// ...
apply plugin: 'com.jakewharton.butterknife'
अब सुनिश्चित करें कि आप सभी ButterKnife एनोटेशन के अंदर R
बजाय R2
उपयोग करते हैं।
class ExampleActivity extends Activity {
// Bind xml resource to their View
@BindView(R2.id.user) EditText username;
@BindView(R2.id.pass) EditText password;
// Binding resources from drawable,strings,dimens,colors
@BindString(R.string.choose) String choose;
@BindDrawable(R.drawable.send) Drawable send;
@BindColor(R.color.cyan) int cyan;
@BindDimen(R.dimen.margin) Float generalMargin;
// Listeners
@OnClick(R.id.submit)
public void submit(View view) {
// TODO submit data to server...
}
// bind with butterknife in onCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
// TODO continue
}
}
बटरकनीफ़ का उपयोग करके बाइंडिंग दृश्य
हम बटर नाइफ के लिए @BindView
और व्यू आईडी के साथ फ़ील्ड्स को एनोटेट कर सकते हैं और अपने लेआउट में संबंधित दृश्य को स्वचालित रूप से खोज सकते हैं।
बांधने का दृश्य
गतिविधि में बाइंडिंग दृश्य
class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
टुकड़ों में बंधे हुए दृश्य
public class FancyFragment extends Fragment {
@BindView(R.id.button1) Button button1;
@BindView(R.id.button2) Button button2;
private Unbinder unbinder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
unbinder = ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
// in fragments or non activity bindings we need to unbind the binding when view is about to be destroyed
@Override
public void onDestroy() {
super.onDestroy();
unbinder.unbind();
}
}
डायलॉग्स में बाइंडिंग व्यू
हम एक दृश्य, गतिविधि या संवाद पर विचार प्राप्त करने के लिए ButterKnife.findById
का उपयोग कर सकते हैं। यह रिटर्न प्रकार का अनुमान लगाने के लिए जेनरिक का उपयोग करता है और स्वचालित रूप से कलाकारों का प्रदर्शन करता है।
View view = LayoutInflater.from(context).inflate(R.layout.thing, null);
TextView firstName = ButterKnife.findById(view, R.id.first_name);
TextView lastName = ButterKnife.findById(view, R.id.last_name);
ImageView photo = ButterKnife.findById(view, R.id.photo);
ViewHolder में बंधन दृश्य
static class ViewHolder {
@BindView(R.id.title) TextView name;
@BindView(R.id.job_title) TextView jobTitle;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
बाइंडिंग संसाधन
इसके अलावा विचारों बंधन के लिए उपयोगी होने के अलावा, एक भी ButterKnife बाँध संसाधनों के लिए इस तरह के भीतर परिभाषित उन लोगों के रूप इस्तेमाल कर सकते हैं strings.xml
, drawables.xml
, colors.xml
, dimens.xml
, आदि
public class ExampleActivity extends Activity {
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red; // int or ColorStateList field
@BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
ButterKnife.bind(this);
}
}
बाइंडिंग व्यू लिस्ट
आप एक सूची या सरणी में कई दृश्य समूहित कर सकते हैं। यह तब बहुत मददगार होता है जब हमें एक साथ कई विचारों पर एक क्रिया करने की आवश्यकता होती है।
@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
//The apply method allows you to act on all the views in a list at once.
ButterKnife.apply(nameViews, DISABLE);
ButterKnife.apply(nameViews, ENABLED, false);
//We can use Action and Setter interfaces allow specifying simple behavior.
static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setEnabled(false);
}
};
static final ButterKnife.Setter<View, Boolean> ENABLED = new ButterKnife.Setter<View, Boolean>() {
@Override public void set(View view, Boolean value, int index) {
view.setEnabled(value);
}
};
वैकल्पिक बाइंडिंग
डिफ़ॉल्ट रूप से, @Bind
और श्रोता बाइंडिंग दोनों आवश्यक हैं। यदि लक्ष्य दृश्य नहीं मिल सकता है तो एक अपवाद को फेंक दिया जाता है। लेकिन अगर हम नहीं कर रहे हैं यकीन है कि अगर एक दृश्य नहीं होगा या नहीं तो हम एक जोड़ सकते हैं @Nullable
क्षेत्रों या करने के लिए एनोटेशन @Optional
तरीकों की व्याख्या इस व्यवहार को दबाने के लिए और एक वैकल्पिक बाध्यकारी पैदा करते हैं।
@Nullable
@BindView(R.id.might_not_be_there) TextView mightNotBeThere;
@Optional
@OnClick(R.id.maybe_missing)
void onMaybeMissingClicked() {
// TODO ...
}
बटरकनीफ़ का उपयोग करके श्रोताओं को बांधना
OnClick श्रोता:
@OnClick(R.id.login)
public void login(View view) {
// Additional logic
}
श्रोता विधि के सभी तर्क वैकल्पिक हैं:
@OnClick(R.id.login)
public void login() {
// Additional logic
}
विशिष्ट प्रकार स्वचालित रूप से डाला जाएगा:
@OnClick(R.id.submit)
public void sayHi(Button button) {
button.setText("Hello!");
}
सामान्य ईवेंट हैंडलिंग के लिए एक ही बंधन में कई आईडी:
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
if (door.hasPrizeBehind()) {
Toast.makeText(this, "You win!", LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Try again", LENGTH_SHORT).show();
}
}
कस्टम दृश्य किसी आईडी को निर्दिष्ट नहीं करके अपने स्वयं के श्रोताओं को बांध सकते हैं:
public class CustomButton extends Button {
@OnClick
public void onClick() {
// TODO
}
}
बटरकनीफ़ में अनबाइंडिंग दृश्य
फ्रैगमेंट में गतिविधियों की तुलना में एक अलग दृश्य जीवनचक्र होता है। OnCreateView में एक टुकड़ा बाँधते समय, onDestroyView में अशक्त करने के लिए दृश्य सेट करें। जब आप अपने लिए ऐसा करने के लिए बाइंड को कॉल करते हैं तो बटर नाइफ एक अनबिंदर उदाहरण देता है। उपयुक्त जीवनचक्र कॉलबैक में इसकी अनबाइंड विधि को कॉल करें।
एक उदाहरण:
public class MyFragment extends Fragment {
@BindView(R.id.textView) TextView textView;
@BindView(R.id.button) Button button;
private Unbinder unbinder;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
unbinder = ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
@Override public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
नोट: onDestroyView () में अनबाइंड () कॉलिंग की आवश्यकता नहीं है, लेकिन इसकी अनुशंसा की जाती है क्योंकि यदि आपके ऐप में एक बड़ा बैकस्ट है तो यह काफी मेमोरी बचाता है।
Android Studio ButterKnife Plugin
एंड्रॉइड बटरकनीफ़ ज़ेलेज़नी
गतिविधियों / टुकड़े / एडेप्टर में चयनित लेआउट XMLs से बटरकनी इंजेक्शन उत्पन्न करने के लिए प्लगिन।
नोट: सुनिश्चित करें कि आप अपने_xml_layou (R.layout.your_xml_layou
) के लिए राइट क्लिक करें, अन्यथा जेनरेट मेनू में बटरकनलाइफ इंजेक्टर विकल्प नहीं होगा।
लिंक: Jetbrains प्लगइन Android ButterKnife Zelezny