SlideShare a Scribd company logo
1 of 103
Android Data Binding
About me
About me
•‫اندروید‬ ‫نویس‬ ‫برنامه‬4‫سال‬
About me
•‫اندروید‬ ‫نویس‬ ‫برنامه‬4‫سال‬
•‫پرهات‬ ‫در‬ ‫کار‬ ‫به‬ ‫مشغول‬
About me
•‫اندروید‬ ‫نویس‬ ‫برنامه‬4‫سال‬
•‫پرهات‬ ‫در‬ ‫کار‬ ‫به‬ ‫مشغول‬
•‫رسان‬ ‫پیام‬ ‫های‬ ‫برنامه‬ ‫روی‬ ‫کاری‬ ‫تجربه‬
About me
•‫اندروید‬ ‫نویس‬ ‫برنامه‬4‫سال‬
•‫پرهات‬ ‫در‬ ‫کار‬ ‫به‬ ‫مشغول‬
•‫رسان‬ ‫پیام‬ ‫های‬ ‫برنامه‬ ‫روی‬ ‫کاری‬ ‫تجربه‬
•‫کاتلین‬ ‫دار‬ ‫دوست‬
About me
•‫اندروید‬ ‫نویس‬ ‫برنامه‬4‫سال‬
•‫پرهات‬ ‫در‬ ‫کار‬ ‫به‬ ‫مشغول‬
•‫رسان‬ ‫پیام‬ ‫های‬ ‫برنامه‬ ‫روی‬ ‫کاری‬ ‫تجربه‬
•‫کاتلین‬ ‫دار‬ ‫دوست‬
•https://github.com/DHosseiny
About me
•‫اندروید‬ ‫نویس‬ ‫برنامه‬4‫سال‬
•‫پرهات‬ ‫در‬ ‫کار‬ ‫به‬ ‫مشغول‬
•‫رسان‬ ‫پیام‬ ‫های‬ ‫برنامه‬ ‫روی‬ ‫کاری‬ ‫تجربه‬
•‫کاتلین‬ ‫دار‬ ‫دوست‬
•https://github.com/DHosseiny
@hosseinydavid
What is Data Binding?
What is Data Binding?
•‫به‬ ‫داده‬ ‫منابع‬ ‫اتصال‬View‫در‬ ‫ها‬xmllayout
What is Data Binding?
•‫به‬ ‫داده‬ ‫منابع‬ ‫اتصال‬View‫در‬ ‫ها‬xmllayout
•‫خودکار‬ ‫آپدیت‬ ‫توانایی‬UI‫داده‬ ‫تغییر‬ ‫با‬
What is Data Binding?
•‫به‬ ‫داده‬ ‫منابع‬ ‫اتصال‬View‫در‬ ‫ها‬xmllayout
•‫خودکار‬ ‫آپدیت‬ ‫توانایی‬UI‫داده‬ ‫تغییر‬ ‫با‬
•Say no to findViewById
Why Data Binding?
Why Data Binding?
•‫تر‬ ‫ساده‬ ‫و‬ ‫تمیزتر‬ ‫کد‬
Why Data Binding?
•‫تر‬ ‫ساده‬ ‫و‬ ‫تمیزتر‬ ‫کد‬
•‫کاهش‬ ‫بدون‬performance
Why Data Binding?
•‫تر‬ ‫ساده‬ ‫و‬ ‫تمیزتر‬ ‫کد‬
•‫کاهش‬ ‫بدون‬performance
•‫کاهش‬ ‫به‬ ‫کمک‬Null Pointer Exception
Why not Data Binding?
Why not Data Binding?
•‫شوند‬ ‫می‬ ‫داده‬ ‫نشان‬ ‫کامپایل‬ ‫زمان‬ ‫در‬ ‫کد‬ ‫نوشتن‬ ‫زمان‬ ‫جای‬ ‫به‬ ‫خطاها‬
Why not Data Binding?
•‫شوند‬ ‫می‬ ‫داده‬ ‫نشان‬ ‫کامپایل‬ ‫زمان‬ ‫در‬ ‫کد‬ ‫نوشتن‬ ‫زمان‬ ‫جای‬ ‫به‬ ‫خطاها‬
•IDE Support‫ضعیف‬
Why not Data Binding?
•‫شوند‬ ‫می‬ ‫داده‬ ‫نشان‬ ‫کامپایل‬ ‫زمان‬ ‫در‬ ‫کد‬ ‫نوشتن‬ ‫زمان‬ ‫جای‬ ‫به‬ ‫خطاها‬
•IDE Support‫ضعیف‬
•IDE Support‫ضعیف‬
Why not Data Binding?
•‫شوند‬ ‫می‬ ‫داده‬ ‫نشان‬ ‫کامپایل‬ ‫زمان‬ ‫در‬ ‫کد‬ ‫نوشتن‬ ‫زمان‬ ‫جای‬ ‫به‬ ‫خطاها‬
•IDE Support‫ضعیف‬
•IDE Support‫ضعیف‬
•IDE Support‫ضعیف‬
How to start?
.1build.gradle
How to start?
.1build.gradle
android {
...
dataBinding {
enabled = true
}
}
How to start?
.1build.gradle
.2Layout tag
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
How to start?
.1build.gradle
.2Layout tag
<layout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
</layout>
How to start?
.1build.gradle
.2Layout tag
<layout>
<data>
<variable
name="user"
type="ir.logcat.databinding.User" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</FrameLayout>
</layout>
How to start?
.1build.gradle
.2Layout tag
<layout>
<data>
<variable
name="user"
type="ir.logcat.databinding.User" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
/>
</FrameLayout>
</layout>
How to start?
.1build.gradle
.2Layout tag
<layout>
<data>
<variable
name="user"
type="ir.logcat.databinding.User" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}"
/>
</FrameLayout>
</layout>
@{}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
}
}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
}
}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
}
}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
binding.setUser(user);
}
}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
binding.setUser(user);
binding.textName.setText("Android Developers");
}
}
How to start?
.1build.gradle
.2Layout tag
.3inflate
public class MainActivity extends AppCompatActivity {
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
binding.setUser(user);
binding.textName.setText("Android Developers");
}
}
Type Safe
Inflation
• DataBindingUtil.setContentView(activity, R.layout.activity_main);
Inflation
• DataBindingUtil.setContentView(activity, R.layout.activity_main);
For Activity
Inflation
• DataBindingUtil.setContentView(activity, R.layout.activity_main);
• ListItemBinding binding = ListItemBinding.inflate(inflater,
parent, attachToParent);
For Activity
Inflation
• DataBindingUtil.setContentView(activity, R.layout.activity_main);
• ListItemBinding binding = ListItemBinding.inflate(inflater,
parent, attachToParent);
For Activity
For Any layout
Inflation
• DataBindingUtil.setContentView(activity, R.layout.activity_main);
• ListItemBinding binding = ListItemBinding.inflate(inflater,
parent, attachToParent);
• ListItemBinding binding = ListItemBinding.bind(view);
For Activity
For Any layout
Inflation
• DataBindingUtil.setContentView(activity, R.layout.activity_main);
• ListItemBinding binding = ListItemBinding.inflate(inflater,
parent, attachToParent);
• ListItemBinding binding = ListItemBinding.bind(view);
For Activity
For Any layout
For inflated view
Basics
Basics
Java Xml
Basics
Java
package ir.logcat.databinding;
import android.view.View;
Xml
Basics
Java
package ir.logcat.databinding;
import android.view.View;
Xml
<layout>
<data>
<import type="android.view.View" />
Basics
Java
package ir.logcat.databinding;
import android.view.View;
private User user;
Xml
<layout>
<data>
<import type="android.view.View" />
Basics
Java
package ir.logcat.databinding;
import android.view.View;
private User user;
Xml
<layout>
<data>
<import type="android.view.View" />
<variable
name="user"
type="ir.parsdroidgroup.databinding.User"
/>
</data>
Basics
Java
package ir.logcat.databinding;
import android.view.View;
private User user;
@Override
protected void onCreate(Bundle
savedInstanceState) {
...
}
Xml
<layout>
<data>
<import type="android.view.View" />
<variable
name="user"
type="ir.parsdroidgroup.databinding.User"
/>
</data>
Basics
Java
package ir.logcat.databinding;
import android.view.View;
private User user;
@Override
protected void onCreate(Bundle
savedInstanceState) {
...
}
Xml
<layout>
<data>
<import type="android.view.View" />
<variable
name="user"
type="ir.parsdroidgroup.databinding.User"
/>
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
</layout>
Live coding
Live coding
Operators And Keywords
Supported Operators and keywords
Supported Operators and keywords
• Mathematical + - / * %
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
• Cast
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
• Cast
• Method calls
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
• Cast
• Method calls
• Array access []
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
• Cast
• Method calls
• Array access []
• Ternary operator ?:
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
• Cast
• Method calls
• Array access []
• Ternary operator ?:
• Elvis operator ??
Supported Operators and keywords
• Mathematical + - / * %
• String concatenation +
• Logical && ||
• Comparison == < > <= >=
• instanceOf
• null
• Cast
• Method calls
• Array access []
• Ternary operator ?:
• Elvis operator ??
• Lambdas and Method references
Examples
android:text="@{String.valueOf(index + 1)}“
android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}“
android:transitionName='@{"image_" + id}'
android:text="@{user.displayName ?? user.lastName}"
android:text="@{list[index]}"
Missing Operators
• this
• super
• new
• Explicit generic invocation
Custom Setters
Custom Setters
Custom Setters
• Automatic Setters
Custom Setters
• Automatic Setters
• BindingAdapters
Custom Setters
• Automatic Setters
• BindingAdapters
• Renamed Setters
Custom Setters
• Automatic Setters
• BindingAdapters
• Renamed Setters
• Binding Conversion
Custom Setters
• Automatic Setters
• BindingAdapters
• Renamed Setters
• Binding Conversion
Automatic Setters
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent“
/>
Automatic Setters
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent“
/>
void setScrimColor(int color)
Automatic Setters
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent“
bind:srcrimColor="@{@color/scrim}"
/>
void setScrimColor(int color)
Automatic Setters
Automatic Setters
<TextView
bind:onClickListener="@{viewModel.onClickListener}"
/>
Automatic Setters
<TextView
bind:onClickListener="@{viewModel.onClickListener}"
/>
public class MyViewModel {
public View.OnClickListener onClickListener = v -> {
//handle click
};
}
Automatic Setters
<TextView
bind:onClickListener="@{viewModel.onClickListener}"
/>
public class MyViewModel {
public void onClickListener(View view){
//handle click
}
}
Automatic Setters
<TextView
bind:onClickListener="@{(view) -> viewModel.onClickListener()}"
/>
public class MyViewModel {
public void onClickListener(){
//handle click
}
}
Automatic Setters
<TextView
bind:onClickListener="@{() -> viewModel.onClickListener()}"
/>
public class MyViewModel {
public void onClickListener(){
//handle click
}
}
Binding Adapters
Binding Adapters
<imageView
android:src="@{user.imageUrl}"
/>
Binding Adapters
<imageView
android:src="@{user.imageUrl}"
/>
@BindingAdapter("android:src")
public static void loadImage(ImageView imageView, String url) {
if (url == null) return;
RequestOptions requestOptions = RequestOptions.circleCropTransform();
Glide.with(imageView.getContext())
.load(url)
.apply(requestOptions)
.into(imageView);
}
Binding Adapters
<imageView
android:src="@{user.imageUrl}"
bind:placeholder="@{R.drawable.placeholder}"
/>
@BindingAdapter("android:src")
public static void loadImage(ImageView imageView, String url) {
if (url == null) return;
RequestOptions requestOptions = RequestOptions.circleCropTransform();
Glide.with(imageView.getContext())
.load(url)
.apply(requestOptions)
.into(imageView);
}
Binding Adapters
<imageView
android:src="@{user.imageUrl}"
bind:placeholder="@{R.drawable.placeholder}"
/>
@BindingAdapter(value = {"android:src", "bind:placeholder"}, requireAll = false)
public static void loadImage(ImageView imageView, String url, int placeHolder) {
if (url == null) return;
RequestOptions requestOptions = RequestOptions.circleCropTransform();
if (placeHolder != 0) {
requestOptions = requestOptions.placeholder(placeHolder);
}
Glide.with(imageView.getContext())
.load(url)
.apply(requestOptions)
.into(imageView);
}
Observation
BaseObservable
BaseObservable
public class User {
private String name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
BaseObservable
public class User extends BaseObservable {
private String name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
BaseObservable
public class User extends BaseObservable {
private String name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(BR.name);
}
public String getName() {
return this.name;
}
}
BaseObservable
public class User extends BaseObservable {
private String name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
notifyPropertyChanged(BR.name);
}
@Bindable
public String getName() {
return this.name;
}
}
ObservableField and it’s primitive friends
ObservableField<T>
ObservableField and it’s primitive friends
ObservableField<T>
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableField and it’s primitive friends
ObservableField<T>
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableParcelable<T>
ObservableField and it’s primitive friends
ObservableField<T>
ObservableBoolean
ObservableByte
ObservableChar
ObservableShort
ObservableInt
ObservableLong
ObservableFloat
ObservableDouble
ObservableParcelable<T>
ObservableList<T>
ObservableArrayList<T>
ObservableField and it’s primitive types
public class User {
private String name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
ObservableField and it’s primitive types
public class User {
private ObservableField<String> name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
ObservableField and it’s primitive types
public class User {
private ObservableField<String> name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name.set(name);
}
public String getName() {
return this.name;
}
}
ObservableField and it’s primitive types
public class User {
private ObservableField<String> name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name.set(name);
}
public String getName() {
return this.name.get();
}
}
ObservableField and it’s primitive types
public class User {
private ObservableField<String> name;
public User(String name) {
this.name = name;
}
public void setName(String name) {
this.name.set(name);
}
public String getName() {
return this.name.get();
}
}
<TextView android:text="@{user.name}" />

More Related Content

Similar to Android Data Binding from zero

CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...Crossref
 
Searching the Web of Data (Tutorial)
Searching the Web of Data (Tutorial)Searching the Web of Data (Tutorial)
Searching the Web of Data (Tutorial)Gerard de Melo
 
HTML CSS Best Practices
HTML CSS Best PracticesHTML CSS Best Practices
HTML CSS Best Practiceshoctudau
 
Fragments: Why, How, What For?
Fragments: Why, How, What For?Fragments: Why, How, What For?
Fragments: Why, How, What For?Brenda Cook
 
WordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp ChicagoWordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp ChicagoJoseph Dolson
 
Tableau and hadoop
Tableau and hadoopTableau and hadoop
Tableau and hadoopCraig Jordan
 
Darwin web standards
Darwin web standardsDarwin web standards
Darwin web standardsJustin Avery
 
Getting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial GadgetsGetting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial GadgetsAtlassian
 
(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery Guide(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery GuideMark Rackley
 
20150211 seo in drupal presentation
20150211 seo in drupal presentation20150211 seo in drupal presentation
20150211 seo in drupal presentationDagmar Muth
 
Easier and faster tagging with Kermit
Easier and faster tagging with KermitEasier and faster tagging with Kermit
Easier and faster tagging with KermitAlban Gérôme
 
Progressively Enhancing WordPress Themes
Progressively Enhancing WordPress ThemesProgressively Enhancing WordPress Themes
Progressively Enhancing WordPress ThemesDigitally
 
Portfolio Oversight With eazyBI
Portfolio Oversight With eazyBIPortfolio Oversight With eazyBI
Portfolio Oversight With eazyBIeazyBI
 
Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...
Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...
Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...Sergii Khomenko
 
Engage 2013 - Flexible Data Access with APIs
Engage 2013 - Flexible Data Access with APIsEngage 2013 - Flexible Data Access with APIs
Engage 2013 - Flexible Data Access with APIsWebtrends
 
Clear AppSec Visibility with AppSpider and ThreadFix
 Clear AppSec Visibility with AppSpider and ThreadFix Clear AppSec Visibility with AppSpider and ThreadFix
Clear AppSec Visibility with AppSpider and ThreadFixDenim Group
 
Curtin University Frontend Web Development
Curtin University Frontend Web DevelopmentCurtin University Frontend Web Development
Curtin University Frontend Web DevelopmentDaryll Chu
 
Razor into the Razor'verse
Razor into the Razor'verseRazor into the Razor'verse
Razor into the Razor'verseEd Charbeneau
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Eric Palakovich Carr
 

Similar to Android Data Binding from zero (20)

CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
CrossRef How-to: A Technical Introduction to the Basics of CrossRef, Chuck Ko...
 
Pratical Deep Dive into the Semantic Web - #smconnect
Pratical Deep Dive into the Semantic Web - #smconnectPratical Deep Dive into the Semantic Web - #smconnect
Pratical Deep Dive into the Semantic Web - #smconnect
 
Searching the Web of Data (Tutorial)
Searching the Web of Data (Tutorial)Searching the Web of Data (Tutorial)
Searching the Web of Data (Tutorial)
 
HTML CSS Best Practices
HTML CSS Best PracticesHTML CSS Best Practices
HTML CSS Best Practices
 
Fragments: Why, How, What For?
Fragments: Why, How, What For?Fragments: Why, How, What For?
Fragments: Why, How, What For?
 
WordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp ChicagoWordPress Accessibility: WordCamp Chicago
WordPress Accessibility: WordCamp Chicago
 
Tableau and hadoop
Tableau and hadoopTableau and hadoop
Tableau and hadoop
 
Darwin web standards
Darwin web standardsDarwin web standards
Darwin web standards
 
Getting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial GadgetsGetting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial Gadgets
 
(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery Guide(Updated) SharePoint & jQuery Guide
(Updated) SharePoint & jQuery Guide
 
20150211 seo in drupal presentation
20150211 seo in drupal presentation20150211 seo in drupal presentation
20150211 seo in drupal presentation
 
Easier and faster tagging with Kermit
Easier and faster tagging with KermitEasier and faster tagging with Kermit
Easier and faster tagging with Kermit
 
Progressively Enhancing WordPress Themes
Progressively Enhancing WordPress ThemesProgressively Enhancing WordPress Themes
Progressively Enhancing WordPress Themes
 
Portfolio Oversight With eazyBI
Portfolio Oversight With eazyBIPortfolio Oversight With eazyBI
Portfolio Oversight With eazyBI
 
Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...
Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...
Building Ranking Infrastructure: Data-Driven, Lean, Flexible - Sergii Khomenk...
 
Engage 2013 - Flexible Data Access with APIs
Engage 2013 - Flexible Data Access with APIsEngage 2013 - Flexible Data Access with APIs
Engage 2013 - Flexible Data Access with APIs
 
Clear AppSec Visibility with AppSpider and ThreadFix
 Clear AppSec Visibility with AppSpider and ThreadFix Clear AppSec Visibility with AppSpider and ThreadFix
Clear AppSec Visibility with AppSpider and ThreadFix
 
Curtin University Frontend Web Development
Curtin University Frontend Web DevelopmentCurtin University Frontend Web Development
Curtin University Frontend Web Development
 
Razor into the Razor'verse
Razor into the Razor'verseRazor into the Razor'verse
Razor into the Razor'verse
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!
 

Recently uploaded

Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 

Recently uploaded (20)

Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 

Android Data Binding from zero

Editor's Notes

  1. 1- نکات ریز زیادی داره که نمیشه تو ی اسلاید جا بشه. 2- توسط google نوشته شده.
  2. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  3. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  4. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  5. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  6. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  7. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  8. 1- چون روی پیام رسان کار میکنم مثالهام هم پیام رسانی است.
  9. 1- وصل کردن مدل به view 2- کد زنی در xml 3- نیاز هست بدون رفرش کردن ui آپدیت شود. 4-کار اضافی 5- بهتر از butterknife و kotlin
  10. 1- وصل کردن مدل به view 2- کد زنی در xml 3- نیاز هست بدون رفرش کردن ui آپدیت شود. 4-کار اضافی 5- بهتر از butterknife و kotlin
  11. 1- وصل کردن مدل به view 2- کد زنی در xml 3- نیاز هست بدون رفرش کردن ui آپدیت شود. 4-کار اضافی 5- بهتر از butterknife و kotlin
  12. 1- وصل کردن مدل به view 2- کد زنی در xml 3- نیاز هست بدون رفرش کردن ui آپدیت شود. 4-کار اضافی 5- بهتر از butterknife و kotlin
  13. 1- no findview by id 2- حدود 0% حتی افزایش performance 3- default value
  14. 1- no findview by id 2- حدود 0% حتی افزایش performance 3- default value
  15. 1- no findview by id 2- حدود 0% حتی افزایش performance 3- default value
  16. 1- no findview by id 2- حدود 0% حتی افزایش performance 3- default value
  17. 1- warning ی مثل جاوا نیست. 2- پس رفت 3- رفتن سر متد و فیلد
  18. 1- warning ی مثل جاوا نیست. 2- پس رفت 3- رفتن سر متد و فیلد
  19. 1- warning ی مثل جاوا نیست. 2- پس رفت 3- رفتن سر متد و فیلد
  20. 1- warning ی مثل جاوا نیست. 2- پس رفت 3- رفتن سر متد و فیلد
  21. 1- warning ی مثل جاوا نیست. 2- پس رفت 3- رفتن سر متد و فیلد
  22. Logic پیچیده ننویسیم.
  23. میشود از ارثبری یا extension function ها استفاده کرد.
  24. میشود از ارثبری یا extension function ها استفاده کرد.
  25. میشود از ارثبری یا extension function ها استفاده کرد.