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

તમે EditText (લખાણનું ખાનું) અને Button જેવાં widgets ને layout ના XML માં id સાથે મૂકો છો, પછી Java માં findViewById થી એમને પકડો છો અને onClick ગોઠવીને દબાવવા પર પ્રતિભાવ આપો છો, અને વાપરનારે લખેલું editText.getText().toString() થી વાંચો છો.

10 min read · 9 cards · 2 checks

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


Theory

લેબલથી ખરેખરા form સુધી

અત્યાર સુધી FestConnect ફક્ત લખાણ દેખાડે છે. નોંધણીના form એ લખાણ લેવું પડે: નામ લખવાનું ખાનું, અને એની સાથે કંઈક કરતું બટન.

એ બે widgets છે, EditText (લખાણનું ખાનું) અને Button, જે XML ના layout માં મુકાય છે. પણ એમને મૂકવું એ અડધું કામ છે. બીજું અડધું Java છે: દરેક widget ને એના id થી પકડવું અને બટન દબાય ત્યારે પ્રતિભાવ આપવો. એ દબાવવાનો પ્રતિભાવ છે onClick નું event, અને ત્યાં જ તમારી app પહેલી વાર વાપરનારને સાંભળે છે.

Theory

Form રચો, પછી બારીએ કારકુન બેસાડો

XML એ counter પર મુકાયેલું છાપેલું form છે: નામ માટે ખાલી જગ્યા, પાના પર દોરેલું 'Submit' નું બટન. પણ કાગળ જાતે કશું કરતું નથી. Java એ બારીએ બેઠેલો કારકુન છે જે, Submit દબાય ત્યારે, ખરેખર ખાલી જગ્યા વાંચે છે અને પગલું લે છે. તમે form એક વાર રચો છો (XML) અને પ્રતિભાવ આપવા કારકુન બેસાડો છો (onClick નું handler).

Theory

મૂકો, શોધો, પ્રતિભાવ આપો

1. XML માં મૂકો: એક EditText અને એક Button, દરેક android:id="@+id/..." સાથે.

2. Java માં શોધો: EditText name = findViewById(R.id.name); એ XML ના widget ને Java ના object સાથે જોડે છે.

3. વાંચો: name.getText().toString() વાપરનારે લખેલું (String તરીકે) લાવે છે.

4. દબાવવા પર પ્રતિભાવ આપો, બે રીતે:

  • XML માં android:onClick="register" જે public void register(View v) ની પદ્ધતિ બોલાવે, કે
  • Java માં button.setOnClickListener(v -> { ... });.

Practical

Register નું બટન નામ વાંચે છે

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.getText().toString() લખો છો, ફક્ત name.getText() નહીં. વધારાનું toString() કેમ? getText() ખરેખર કયો પ્રકાર પાછો આપે છે?

Show the answer

getText() એ Editable (CharSequence જેવો object) પાછો આપે છે, સાદી String નહીં. મોટા ભાગના code ને String જોઈએ છે, એટલે તમે એને ફેરવવા `.toString()` બોલાવો છો. જો તમે એ છોડી દો અને Editable ને String તરીકે વાપરવા જાઓ (સરખામણી, સંગ્રહ, કે String ની અપેક્ષા રાખતા Toast માટે), તો એ તમે ધારો છો એમ વર્તશે નહીં. getText().toString() નો રૂઢિપ્રયોગ એ જ રીત છે જેનાથી તમે દર વખતે EditText માંથી વાપરી શકાય એવી String કાઢો છો.

Quiz

જો તમે XML માં android:onClick="register" વાપરો, તો Java ની પદ્ધતિ કેવી હોવી જોઈએ?

  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 પાછું આપવું જોઈએ, અને એક જ View નું parameter લેવું જોઈએ (જેના પર click થયું): public void register(View v) (A). એ private ન હોઈ શકે કે મૂલ્ય પાછું ન આપી શકે (B), એણે View નું parameter સ્વીકારવું જ પડે, એટલે parameter વગરની આવૃત્તિ જોડાતી નથી (C), અને parameter એ View છે, int નહીં (D). Signature ખોટું હોય તો Android પદ્ધતિ શોધી/બોલાવી શકતું નથી, એટલે બટન મરેલું લાગે છે.

Watch out

Widget અને onClick ના ફાંદા

1. toString() વગર EditText વાંચવું: getText() એ Editable છે, String નહીં. getText().toString() વાપરો.

2. ખોટું onClick નું signature: XML ના onClick ની પદ્ધતિ public void name(View v) હોવી જ જોઈએ. Private હોય, કે View ના parameter વગરની હોય, તો એ બોલાવાશે નહીં.

3. findViewById ભૂલી જવું (કે ખોટું id): એ null પાછું આપે છે, અને એને અડતાં NullPointerException સાથે app તૂટે છે. XML માંના @+id ને Java માંના R.id સાથે મેળવો.

Theory

આગળ: વાપરનારને કહો કે એ થઈ ગયું

અત્યારે દબાવેલું નામ ક્યાંય દેખાતું નથી. હવે પછીનો પાઠ Toast ઉમેરે છે, એટલે કે થોડી વાર માટે ઊપસી આવતો નાનો સંદેશો, જેથી Register દબાવતાં 'Welcome, Aditi' ચમકે. પ્રતિભાવ આપવાની એ સૌથી સાદી રીત છે, અને એ તમે હમણાં લખેલા onClick માં સીધી બંધબેસે છે.

Summary

Key takeaways

  • XML માં widgets મૂકો: EditText (લખાણનું ખાનું) અને Button, દરેક android:id="@+id/..." સાથે.
  • Java માં findViewById(R.id.xxx) એ XML ના widget ને Java ના object સાથે જોડે છે (ids મેળવો).
  • EditText ને getText().toString() થી વાંચો (getText() એ Editable પાછો આપે છે, String નહીં).
  • દબાવવાનું બે રીતે સંભાળો: android:onClick="method" (public void method(View v)) કે Java માં setOnClickListener.
  • ખોટું onClick નું signature કે null આપતું findViewById બટનને મરેલું દેખાડે છે કે app તોડે છે.
  • Memory hook: XML form રચે છે, Java બારીએ કારકુન બેસાડે છે.

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