Form Widget Palette: placing text fields and Button, Button onClick event

आप EditText (एक text field) और Button जैसे widgets layout XML में एक id के साथ रखते हैं, फिर Java में findViewById से उन्हें पकड़ते हैं और एक tap पर react करते हैं एक onClick set करके, editText.getText().toString() से user ने क्या type किया वह पढ़ते हुए।

10 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


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 कैसा दिखना चाहिए?

  1. public void register(View v) { ... }
  2. private String register() { ... }
  3. public void register() { ... } (कोई parameters नहीं)
  4. 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 करता है।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Android Widgets (UI)

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Form Widget Palette: placing text fields and Button, Button onClick event · Mobile Application Development - 1 (option B) · Gri-Learn