Android рд╡рд┐рдХрд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рди


рдЕрднрд┐рд╡рд╛рджрди, рд╣рдмреНрд░реЛрдЬрд╝рд┐рддреЗрд▓реАред рдореИрдВ рдПрдХ Android рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рд╡рд╣ рднреА рдирд╣реАрдВред рдореИрдВ рдПрдХ рдЖрд▓рд╕реА Android рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ, рджрд┐рдирдЪрд░реНрдпрд╛ рдФрд░ рдпрд╛рдВрддреНрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рджреМрд░рд╛рди, рдЬрд┐рдиреНрд╣реЗрдВ рдореБрдЭрд╕реЗ рдХрд┐рд╕реА рднреА рдорд╛рдирд╕рд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рд╡реЗ рдореБрдЭ рдкрд░ рдЕрддреНрдпрд╛рдЪрд╛рд░ рдХрд░рдиреЗ рд▓рдЧреЗред рдЕрдм IDE рдореЗрд░реЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред


рдкрд░рд┐рдЪрдп


рдлрд┐рд▓рд╣рд╛рд▓, рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рджреГрд╢реНрдп рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд░реЛрдмреВрдЬрд╛рдЗрд╕ рдерд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рдкрдардиреАрдпрддрд╛ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╕рдорд╕реНрдпрд╛рдПрдБ рддрдм рд╢реБрд░реВ рд╣реБрдИрдВ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рднреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд░реЛрдмреЛрдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмреИрд╕рд╛рдЦреА рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдирд┐ рд╕рдВрд╢рдпрд╡рд╛рдж рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ AndroidAnnotations, ButterKnife рдЗрддреНрдпрд╛рджрд┐ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпреЗ рд╕рднреА рдпрд╛ рддреЛ рдХреЛрдб рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреБрдЪреНрдЫ рдЪреАрдЬреЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдЯрд░рдХрдиреАрдлрд╝ рдореЗрдВ:

@InjectView(R.id.title) TextView title; 

рдХреЗ рдмрдЬрд╛рдп

 title = (TextView) findViewById(R.id.title); 

рд╕реНрд╡-рдкреВрд░реНрдг рдФрд░ рдХреНрд╡рд┐рдХрдлрд╝рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╕рдордп рд▓реЗрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ - рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рднреБрдЧрддрд╛рди рдХреНрдпреЛрдВ рдХрд░реЗрдВред

рджреВрд╕рд░рд╛ рдЖрдИрдбреАрдИ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ ( http://habrahabr.ru/post/183502/ ) рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рдЖрджрдд рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдиреНрдп рдЙрдкрд╛рдп


рдкрд┐рдЫрд▓реЗ рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдкреНрд░рд╢реНрди рджреНрд╡рд╛рд░рд╛ рд╕рддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдХрд┐рд╕реА рдиреЗ рдЕрднреА рддрдХ xml рд▓реЗрдЖрдЙрдЯ рд╕реЗ рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ / рдкреНрд▓рдЧрдЗрди / %% рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЧреВрдЧрд▓ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЬреЛ рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬрд╝ рдорд┐рд▓реА рд╡рд╣ рдереА http://code.google.com/p/android-code-generator-plugin/ ред рдПрдХреНрд▓рд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рдЬреЛ рдПрдХреНрд╕рдПрдордПрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд%% рдЧрддрд┐рд╡рд┐рдзрд┐.рдЬрд╡рд╛ рдХрд╛ рдирд╛рдо рджреЗрддрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рдмреНрд▓реЙрдЧ рд▓реЗрдЦ рднреА рд╣реИред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдпрд╛ рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреАрдврд╝реА рдерд╛, рдпрд╛ "рдореБрдЭреЗ рдпрд╣ рдХрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ?" рдкреНрд░рд╢реНрдиред

рдЗрд╕реЗ рдПрдХ-рджреЛ рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдкрд░, рдореБрдЭреЗ рдХрдИ рдРрд╕реА рдЪреАрдЬреЗрдВ рдорд┐рд▓реАрдВ, рдЬреЛ рдореБрдЭреЗ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддреАрдВ:
- рд╕реАрдзреЗ onCreate () рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рджреЗрдЦреЗрдВ;
- рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдореИрдиреБрдЕрд▓ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛;
- рдХрд╕реНрдЯрдо рдлреЛрдВрдЯ рд╕рднреА рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рд░реЛрдмреЛрдЯреЛ рд╣реИ, рддрд╛рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд╕рдорд╛рди рджрд┐рдЦреЗред
- рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрддрд░ рдкрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдЬрдм рдЙрдирдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ 3-4 рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ;
- рд╕рднреА рдХреА рдкреАрдврд╝реА рдЬреЛ рдЖрдИрдбреА рд╣реИред рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХрдВрдЯреЗрдирд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реИрдЦрд┐рдХрдпрд░рдЖрдЙрдЯ) рдХреЛрдб рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рд╡рд░реНрдгрд┐рдд рдзрд╛рд░рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг ArrayAdapter рдХреА рдХреЛрдИ рдкреАрдврд╝реА рдирд╣реАрдВ рд╣реИред рдмрд╛рдд рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ;
- рдХрдорд┐рдЯреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдлрд┐рд░ рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░рд░реНрдердХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреНрд░рддрд┐рдмрд┐рдВрдм рдФрд░ рд╕рдВрдЪрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреАрдУрдЖрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рдЧрдП:
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ;
- рдХреЗрд╡рд▓ рдЙрди рд╡реНрдпреВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ, рдЬреЛ рдлреЙрдиреНрдЯ рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрдХреНрд╢рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
- рд╡реНрдпреВ, рдлреЛрдВрдЯ, рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 3 рддрд░реАрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдСрдирдХреНрд░рд┐рдПрдЯ рдореЗрдВ рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЛрдб рдХреА рдПрдХ рджреАрд╡рд╛рд░ рдорд┐рд▓рддреА рд╣реИ;
- рдпрджрд┐ рд╕реВрдЪреА рджреГрд╢реНрдп xml рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдбрд╛рдкреНрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрдЯ рддрддреНрд╡ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдПрдХ xml- рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд╡рд╛рдж рдХрд░реЗрдВред

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдзрд┐ xml рдСрд▓ рд╡реНрдпреВ рд╕реЗ рдЪреБрдирддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдИрдбреА рдкрдВрдЬреАрдХреГрдд рдереАред
 private NodeList getNodesWithId(InputStream inputStream) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // factory.setNamespaceAware(true); // never forget this! DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(inputStream); XPathFactory pathFactory = XPathFactory.newInstance(); XPath xPath = pathFactory.newXPath(); XPathExpression expression = xPath.compile("//*[@id]"); return (NodeList) expression.evaluate(doc, XPathConstants.NODESET); } 

рдЗрд╕рдХреЗ рдмрд╛рдж, рддреАрди рд╡рд░реНрдЧ рдмрдирд╛рдП рдЧрдП: ViewGenerator, ActivGenerator, AdapterGeneratorред
рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдХреЛрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрдЯрд░реНрди рд╣реИрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 private final static String FIELD_PATTERN = "\tprivate %1$s %2$s;\n"; private final static String METHOD_VOID_PATTERN = "\tprivate void %1$s(){\n%2$s\t}\n"; 

ViewGenerator xml (рдлрд╝реАрд▓реНрдб, findViewById, setTypeFace, setListener рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЖрдпрд╛рддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛) рд╕реЗ рд╡реНрдпреВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЛрдиреЛрдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдФрд░ ViewHolder рдПрдбрд╛рдкреНрдЯрд░ рдХреЗ рд▓рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, setListeners рдХреЗ рд▓рд┐рдП рдкреАрдврд╝реА:
 private String getListeners(boolean innerClass){ StringBuilder builder = new StringBuilder(); for (WidgetResource widgetResource : widgetsTypes.keySet()) { if (BUTTON_WIDGETS.contains(widgetsTypes.get(widgetResource).getName())) { builder.append(String.format(innerClass ? ONCLICK_INNER_PATTERN : ONCLICK_PATTERN, widgetResource.getVariableName())); } } return builder.toString(); } 

ActivityGenerator ViewGenerator рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЛрдб рдмрдирд╛рддрд╛ рд╣реИ:
 public String generate() { StringBuilder stringBuilder = new StringBuilder(); if (packageName != null && !packageName.isEmpty()) { stringBuilder.append(getPackage()); stringBuilder.append("\n"); } stringBuilder.append(getImports()); stringBuilder.append(viewGenerator.getImports()); stringBuilder.append("\n"); StringBuilder innerBuilder = new StringBuilder(); innerBuilder.append(getTag()); innerBuilder.append("\n"); innerBuilder.append(viewGenerator.getFields(false)); innerBuilder.append("\n"); innerBuilder.append(getCreateMethod()); innerBuilder.append("\n"); innerBuilder.append(getInitActionBarMethod()); innerBuilder.append("\n"); innerBuilder.append(viewGenerator.getInitViewsMethod(false)); innerBuilder.append("\n"); innerBuilder.append(viewGenerator.getSetFontsMethod(false)); innerBuilder.append("\n"); innerBuilder.append(viewGenerator.getSetListenersMethod(false)); stringBuilder.append(String.format(HEADER_PATTERN, activityResource.getVariableName(), innerBuilder.toString())); return stringBuilder.toString(); } 


рддрджрдиреБрд╕рд╛рд░ AdapterGenerator рдПрдбрд╛рдкреНрдЯрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
 public String generate() { StringBuilder stringBuilder = new StringBuilder(); if (packageName != null && !packageName.isEmpty()) { stringBuilder.append(getPackage()); stringBuilder.append("\n"); } stringBuilder.append(getImports()); stringBuilder.append("\n"); stringBuilder.append(getHeader()); stringBuilder.append("\n"); stringBuilder.append(getTag()); stringBuilder.append("\n"); stringBuilder.append(FIELDS_PATTERN); stringBuilder.append("\n"); stringBuilder.append(getConstructor()); stringBuilder.append("\n"); stringBuilder.append(getGetView()); stringBuilder.append("\n"); stringBuilder.append(getHolder()); stringBuilder.append("}"); stringBuilder.append("\n"); return stringBuilder.toString(); } 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рдХрд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

рдЧрддрд┐рд╡рд┐рдзрд┐

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/news_list_activity_news_list" android:layout_width="match_parent" android:layout_height="match_parent" /> <ImageView android:layout_width="fill_parent" android:layout_height="wrap_content" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" <ProgressBar android:id="@+id/articles_progress" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/articles_exist_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/articles_exist_button" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout> </RelativeLayout> 

рд╢реАрдЯ рддрддреНрд╡

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="15dp" android:paddingRight="15dp" > <TextView android:id="@+id/row_news_date_header_text" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <RelativeLayout android:id="@+id/news_main_layout" android:layout_width="fill_parent" android:layout_height="wrap_content" > <FrameLayout android:id="@+id/row_news_image_container" android:layout_width="96dp" android:layout_height="68dp" > <ImageView android:id="@+id/row_news_icon" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" /> </FrameLayout> <TextView android:id="@+id/row_news_title_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/row_news_type_text" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/row_news_date_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/row_news_date_text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> <View android:id="@+id/row_news_items_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:background="@drawable/divider_gray_horizontal" /> </LinearLayout> 


рдкрд░рд┐рдгрд╛рдо

 package com.test.activity; import android.os.Bundle; import android.app.Activity; import android.widget.ProgressBar; import android.widget.TextView; import android.graphics.Typeface; import com.test.R; import android.widget.ListView; import android.widget.Button; import android.view.View.OnClickListener; import android.view.View; public class NewsListActivityActivity extends Activity { private static final String TAG = NewsListActivityActivity.class.getSimpleName(); private ProgressBar articlesProgress; private ListView newsListActivityNewsList; private TextView articlesExistTextView; private Button articlesExistButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_list_activity); initActionBar(); initViews(); setFonts(); setListeners(); } private void initActionBar(){ } private void initViews(){ articlesProgress = (ProgressBar) findViewById(R.id.articles_progress); newsListActivityNewsList = (ListView) findViewById(R.id.news_list_activity_news_list); articlesExistTextView = (TextView) findViewById(R.id.articles_exist_text_view); articlesExistButton = (Button) findViewById(R.id.articles_exist_button); } private void setFonts(){ Typeface roboto = null;//TODO init this by utils articlesExistTextView.setTypeface(roboto); } private void setListeners(){ articlesExistButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); } } 

 package com.test.adapter; import com.test.R; import android.graphics.Typeface; import android.content.Context; import java.util.List; import android.widget.ArrayAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.graphics.Typeface; import android.widget.ImageView; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.view.View.OnClickListener; import android.view.View; public class NewsListActivityAdapter extends ArrayAdapter<String>{ private static final String TAG = NewsListActivityAdapter.class.getSimpleName(); private Context context; private LayoutInflater inflater; public NewsListActivityAdapter(Context context, List<String> objects) { super(context, R.layout.news_list_item, objects); inflater = LayoutInflater.from(context); this.context = context; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null){ convertView = inflater.inflate(R.layout.news_list_item, parent, false); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } String item = getItem(position); if (item != null){ holder.populateForm(item); } return convertView; } private class ViewHolder{ private TextView rowNewsDateHeaderText; private TextView rowNewsDateText; private TextView rowNewsTypeText; private TextView rowNewsTitleText; public ViewHolder(View v){ initViews(v); setFonts(); } private void initViews(View v){ rowNewsDateHeaderText = (TextView) v.findViewById(R.id.row_news_date_header_text); rowNewsDateText = (TextView) v.findViewById(R.id.row_news_date_text); rowNewsTypeText = (TextView) v.findViewById(R.id.row_news_type_text); rowNewsTitleText = (TextView) v.findViewById(R.id.row_news_title_text); } private void setFonts(){ Typeface roboto = null;//TODO init this by utils rowNewsDateHeaderText.setTypeface(roboto); rowNewsDateText.setTypeface(roboto); rowNewsTypeText.setTypeface(roboto); rowNewsTitleText.setTypeface(roboto); } public void populateForm(String item) { } } } 


рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ



1. рдЧреНрд░рд╣рдг рдХреЗ рдкреНрд▓рдЧрдЗрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдЬрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБред
2. рдЧреНрд░рд╣рдг рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВред
3. рд▓реЗрдЖрдЙрдЯ рд╕реНрдХреНрд░реАрди рдХреА рдЖрд╡рд╢реНрдпрдХ xml рдлрд╛рдЗрд▓реЗрдВ рдЪреБрдиреЗрдВред
4. рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ -> рдПрдВрдбреНрд░реЙрдЗрдб рдХреЛрдб рдЬрдирд░реЗрдЯрд░ред
5. рд╣рдо рд╕рдВрдХреБрд▓% packagename%ред рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдФрд░% packagename% .adapter рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖



рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрди рдЧреНрд░рд╣рдг 4.2 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

PS рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/In185234/


All Articles