Theory
एक label से एक असली form तक
अभी तक FestConnect सिर्फ़ text दिखाता है। एक registration form को इसे लेना भी है: एक नाम type करने का box, और एक button जो इसके साथ कुछ करे।
ये दो widgets हैं, EditText (एक text field) और Button, XML layout में रखे गए। पर उन्हें रखना काम का आधा हिस्सा है। दूसरा आधा Java है: हर widget को इसकी id से पकड़ना और button tap होने पर react करना। वह tap reaction onClick event है, और यहीं आपकी app पहली बार user को सुनती है।
Theory
पहले form design कीजिए, फिर desk staff कीजिए
XML counter पर printed form है: नाम के लिए एक blank, page पर drawn एक 'Submit' button। पर paper अपने आप कुछ नहीं करता। Java वह clerk है desk पर जो, जब Submit दबता है, actually blank पढ़ता है और act करता है। आप form एक बार design करते हैं (XML) और respond करने के लिए एक clerk station करते हैं (onClick handler)।
Theory
रखिए, ढूँढिए, react कीजिए
1. XML में रखिए: एक EditText और एक Button, हर एक android:id="@+id/..." के साथ।
2. Java में ढूँढिए: EditText name = findViewById(R.id.name); XML widget को एक Java object से link करता है।
3. पढ़िए: name.getText().toString() user ने क्या type किया वह लेता है (एक String की तरह)।
4. एक tap पर react कीजिए, दो तरीक़ों से:
- XML
android:onClick="register"एकpublic void register(View v)method call करते हुए, या - Java
button.setOnClickListener(v -> { ... });।
Practical
Register button नाम पढ़ता है
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.activity_main);
EditText name = findViewById(R.id.name);
Button register = findViewById(R.id.register);
register.setOnClickListener(v -> {
String typed = name.getText().toString(); // read the field
// (next lesson: show 'typed' in a Toast)
});
}
}
// XML alternative for the button:
// android:onClick="register" -> public void register(View v) { ... }Think first
getText().toString() क्यों?
Name field पढ़ने के लिए आप name.getText().toString() लिखते हैं, सिर्फ़ name.getText() नहीं। Extra toString() क्यों? getText() actually कौन सा type return करता है?
Show the answer
getText() एक Editable return करता है (एक CharSequence-जैसा object), plain String नहीं। ज़्यादातर code को एक String चाहिए, तो आप इसे convert करने के लिए `.toString()` call करते हैं। अगर आप इसे skip करें और Editable को एक String की तरह इस्तेमाल करने की कोशिश करें (comparison, storage, या एक Toast के लिए जो एक String expect करता है), यह आपकी उम्मीद के हिसाब से behave नहीं करेगा। Idiom getText().toString() वह है जिससे आप हर बार एक EditText से एक usable String निकालते हैं।
Quiz
अगर आप XML में android:onClick="register" इस्तेमाल करते हैं, आपका Java method कैसा दिखना चाहिए?
- public void register(View v) { ... }
- private String register() { ... }
- public void register() { ... } (कोई parameters नहीं)
- void register(int id) { ... }
Show the answer
public void register(View v) { ... }
एक android:onClick handler public होना चाहिए, void return करना चाहिए, और एक अकेला View parameter (clicked view) लेना चाहिए: public void register(View v) (A)। यह private नहीं हो सकता या एक value return नहीं कर सकता (B), इसे View parameter accept करना ज़रूरी है, तो एक no-arg version bind होने में fail होता है (C), और parameter एक View है, int नहीं (D)। Signature ग़लत कीजिए और Android method ढूँढ/call नहीं कर पाता, तो button dead दिखता है।
Watch out
Widget और onClick traps
1. toString() के बिना एक EditText पढ़ना: getText() एक Editable है, String नहीं। getText().toString() इस्तेमाल कीजिए।
2. ग़लत onClick signature: XML onClick method public void name(View v) होना ज़रूरी है। एक private वाला, या View parameter के बिना वाला, call नहीं होगा।
3. findViewById भूलना (या एक ग़लत id): null return करता है, और इसे छूना NullPointerException के साथ crash करता है। XML के @+id को Java के R.id से match कीजिए।
Theory
अगला: user को बताइए यह काम कर गया
अभी tapped नाम कहीं visible नहीं जाता। अगला lesson एक Toast जोड़ता है, वह छोटा message जो थोड़ी देर के लिए pop up होता है, तो Register tap करना 'Welcome, Aditi' flash करता है। यह feedback देने का सबसे simple तरीक़ा है, और यह उस onClick में सीधे fit होता है जो आपने अभी लिखा।
Summary
Key takeaways
- XML में widgets रखिए: EditText (text field) और Button, हर एक android:id="@+id/..." के साथ।
- Java में, findViewById(R.id.xxx) XML widget को एक Java object से link करता है (ids match कीजिए)।
- getText().toString() से एक EditText पढ़िए (getText() एक Editable return करता है, String नहीं)।
- एक tap दो तरीक़ों से handle कीजिए: android:onClick="method" (public void method(View v)) या Java में setOnClickListener।
- एक ग़लत onClick signature या एक null findViewById button को dead या crash करता दिखाता है।
- Memory hook: XML form design करता है, Java desk staff करता है।