рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рд╣рд╛рдп рд╕рд╛рдерд┐рдпреЛрдВ!
рдЖрдЬ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдЧреНрд░рд╣рдг рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧреА рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рдирд┐рдпрдорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЕрдм рддрдХ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╣рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдЗрдбрд┐рдпрд╛ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИрдВ? рдпреЗ рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЯреБрдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдИрдбреА + рдЖрдкрдХреЗ рд▓рд┐рдП Ctrl + Space рджрдмрд╛рддреЗ рд╕рдордп рдЬрд▓реНрджреА рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╣рдг рдореЗрдВ "рд╢рдмреНрдж" рджрд░реНрдЬ рдХрд░реЗрдВ, Ctrl + Space рджрдмрд╛рдПрдБред рдмрдо, рдЖрдкрдХреЛ System.out.println (), рдпрд╛ "рд╕рд╛рдордиреЗ" рдорд┐рд▓рд╛ - рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкрд░рд┐рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдИрдбреАрдИ рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╢реБрд░реВ рдХрд░реЗрдВред
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдВрдбреЛ-рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ-рдЬрд╛рд╡рд╛-рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдиреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рддреИрдпрд╛рд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдФрд░ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдП рд╣реИрдВред

рдореЗрд░реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ "at_" рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдмрдирд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рднреА рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╣реИрдВрдбрд▓рд░ (at_handler)
${:import (android.os.Handler, android.os.Message, java.lang.ref.WeakReference)} private static final class ${handler_name} extends Handler { private WeakReference<${enclosing_type}> ${outer}Ref; public ${handler_name}(${enclosing_type} ${outer}) { ${outer}Ref = new WeakReference<${enclosing_type}>(${outer}); } public void handleMessage(Message msg) { } }
рдпрд╣ рд╕рд░рд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрдХ рд░рд┐рдХреНрдд рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдирд╛ рдЬреЛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИ, рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд░рд┐рд╕рд╛рд╡ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреА рдЖрддреНрдорд╛ рдХреЗ рд▓рд┐рдП рдШреГрдгрд╛ рдХреЗ рднрдпрдВрдХрд░ рдШреГрдгрд╛ рдХреЛ рдмреБрд▓рд╛рдПрдЧрд╛ред
рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ AsyncQueryHandler (at_queryhandler) рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред
${:import (android.os.AsyncQueryHandler, android.content.ContentResolver, java.lang.ref.WeakReference)} private static final class ${handler_name} extends AsyncQueryHandler { private WeakReference<${enclosing_type}> ${outer}Ref; public ${handler_name}(ContentResolver cr, ${enclosing_type} ${outer}) { super(cr); ${outer}Ref = new WeakReference<${enclosing_type}>(${outer}); } }
рдкрд╛рд░реНрд╕рд▓реЗрдмрд▓ (at_parcelable)
Parcelable рдмрдирд╛рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ?
${:import (android.os.Parcel, android.os.Parcelable)} public static class ${parcelable_class} implements Parcelable { public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) {
рдпрд╣ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг-рдкрд╛рд░реНрд╕рд▓ рд╢реНрд░реЗрдгреА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдЧрд▓реЗ рдПрдХ (at_creator)
${:import (android.os.Parcel, android.os.Parcelable)} public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) {
рд╣рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
isEmpty (at_nisempty)
${:import (android.text.TextUtils)}!TextUtils.isEmpty(${cursor})
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛ рдЖрдкрдХреЛ рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдЪреЗрдХ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
getView (at_getview)
рдирд┐рдореНрди рдПрдХ ViewHolder рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ getView рдирд┐рд░реНрдорд╛рдг рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ DevConf 2013 рдореЗрдВ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗ рдереЙрдорд╕ (Android рдХрд┐рдХрд╕реНрдЯрд╛рд░реНрдЯрд░ рдФрд░ AndroidAnnotations рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд▓реЗрдЦрдХ) рд╕реЗ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕реАрдЦрд╛ред
@Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { v = LayoutInflater.from(context).inflate(${layout_name}, null); ViewHolder h = new ViewHolder(); v.setTag(h); } ViewHolder holder = (ViewHolder) v.getTag(); return v; } static class ViewHolder {
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реБрдЦрдж рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдЕрдкрдиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЧрд┐рддреБрдм
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╢реБрд░реВ рдХреА, рдЬрд┐рд╕реЗ рдореИрдВ рдирдП рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ред Xml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдЧреНрд░рд╣рдг рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред