Theory
એક પડદા માટે બે files
તમારા FestConnect ના સ્વાગતના પડદાએ અમુક રીતે દેખાવું પડે (મથાળું, Register નું button) અને અમુક વસ્તુઓ કરવી પડે (button દબાય ત્યારે પ્રતિભાવ આપવો). Android જાણી જોઈને એ બે કામને બે files માં વહેંચે છે.
Activity (Java નો class) એ પડદાનું મગજ છે: એનું વર્તન. Layout (XML ની file) એ પડદાનો ચહેરો છે: એનો દેખાવ. એક પડદો, બે files, અને એમને જોડતી code ની એક જ line. આ વહેંચણી એ Android ના UI નો પહેલો મોટો વિચાર છે.
Theory
મંચ અને મંચ સંભાળનાર
એક નાટક વિચારો. સેટ (ચીતરેલો પડદો, રાચરચીલાની ગોઠવણ) અલગથી રચાય અને વર્ણવાય છે: એ છે XML નું layout. જે મંચ સંભાળનાર ક્રિયાનો ઇશારો કરે છે, ઘટનાઓને પ્રતિભાવ આપે છે, અને ખેલ ચલાવે છે એ છે Java માંનું Activity. સેટ અભિનય કરતો નથી; સંભાળનાર દૃશ્ય ચીતરતો નથી. એમને અલગ રાખવાથી એકને બીજાને ખલેલ પહોંચાડ્યા વગર બદલી શકાય છે.
Theory
Activity અને Layout, ઔપચારિક રીતે
- Activity એ app નો એક પડદો છે,
AppCompatActivityને લંબાવતો Java નો class. - એનું જીવનચક્ર `onCreate()` થી શરૂ થાય છે, જે પડદો સર્જાય ત્યારે બોલાવાય છે.
- onCreate ની અંદર તમે layout જોડવા `setContentView(R.layout.activity_main)` બોલાવો છો.
- Layout એ
res/layoutમાંની XML ની file છે જે UI વર્ણવે છે: પાત્રો (LinearLayout) અને widgets (TextView,Button).
દેખાવ XML માં વસે છે; વર્તન Java માં. એ જ છે separation of concerns.
Practical
activity_main.xml (દેખાવ)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Welcome to FestConnect" />
</LinearLayout>Practical
MainActivity.java (વર્તન)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// attach the XML layout to THIS screen
setContentView(R.layout.activity_main);
}
}Think first
બે files ને શું જોડે છે?
તમારી પાસે activity_main.xml (layout) અને MainActivity.java (Activity) છે. કઈ એક line Java ના પડદાને ખરેખર એ XML દેખાડે છે, અને એ ક્યાં જાય છે?
Show the answer
setContentView(R.layout.activity_main); એ line, જે onCreate() ની અંદર super.onCreate(...) પછી મુકાય છે. R.layout.activity_main એ તમારી XML ની file નો સર્જાયેલો ઉલ્લેખ છે, અને setContentView એને પડદા પર ફુલાવે છે. એ line વગર Activity ચાલે તો છે પણ કોરો પડદો દેખાડે છે, કારણ કે એને કયું layout દેખાડવું એ કોઈએ કહ્યું જ નથી. પડદો પોતાનો દેખાવ onCreate માં જ જોડે છે.
Quiz
Android માં Activity અને Layout વિશે કયું statement સાચું છે?
- Activity એ Java માં લખાયેલો પડદો છે; Layout એ XML માં લખાયેલું એનું UI છે
- Activity એ XML ની file છે; Layout એ Java નો class છે
- Activity અને Layout બંને XML માં લખાય છે
- એક Activity માં એકસાથે અનેક unrelated પડદા હોવા જ જોઈએ
Show the answer
Activity એ Java માં લખાયેલો પડદો છે; Layout એ XML માં લખાયેલું એનું UI છે
Activity એ Java ના class તરીકે અમલમાં મુકાયેલો એક પડદો છે, અને Layout એ એ પડદાનું XML માં વર્ણવાયેલું UI છે (A). Option B બંને અદલાબદલ કરે છે. Activity એ Java છે, XML નહીં (C). અને Activity એક જ કેન્દ્રિત પડદો દર્શાવે છે, ઠાંસીને ભરેલા અનેક unrelated પડદા નહીં (D). Java નું વર્તન સામે XML નો દેખાવ, એ સ્વચ્છ વહેંચણી જ આ પાઠ સ્થાપે છે.
Watch out
Activity/Layout ના ફાંદા
1. setContentView ભૂલી જવું: app ચાલે છે પણ પડદો કોરો રહે છે. onCreate માં હંમેશા layout જોડો.
2. કયું કયું છે એ ગૂંચવવું: Activity = Java (વર્તન), Layout = XML (દેખાવ).
3. XML માં તર્ક મૂકવો: XML ફક્ત UI વર્ણવે છે. Button નાં clicks અને data નું સંચાલન Java ના Activity માં (કે onClick ના જોડાણ દ્વારા) જ હોય, layout ની file ની અંદર તર્ક તરીકે ક્યારેય નહીં.
Theory
આગળ: આખો project, અને એનો ગુંદર
તમે એક પડદાની બે files જોઈ. હવે પછીનો પાઠ Android Studio માં આખો FestConnect નો project બનાવે છે, emulator પર 'Welcome' ચલાવે છે, અને એને app બનાવતા બીજા components ની સફર કરાવે છે, જેમાં AndroidManifest.xml અને આપોઆપ સર્જાતું R.java આવે છે, જે @+id/title ને તમે હમણાં વાપરેલા એ R.layout ના ઉલ્લેખમાં ફેરવે છે.
Summary
Key takeaways
- Activity એ app નો એક પડદો છે, જે Java ના class તરીકે લખાય છે (AppCompatActivity ને લંબાવે છે).
- Layout એ એ પડદાનું UI છે, જે res/layout માં XML માં લખાય છે (પાત્રો વત્તા widgets).
- onCreate() એ Activity નું પ્રવેશબિંદુ છે; setContentView(R.layout.activity_main) layout જોડે છે.
- દેખાવ XML માં વસે છે, વર્તન Java માં: separation of concerns.
- setContentView ભૂલી જવાથી પડદો કોરો રહે છે.
- Memory hook: સેટ (XML નું layout) અને મંચ સંભાળનાર (Java નું Activity).