برنامه نویس اندروید
دیتا بایندینگ: خداحافظ findViewById(قسمت اول)
دیتا بایندینگ یکی از کتابخانه های شناخته شده اندروید می باشد که توسط گوگل پیاده سازی شده است. این کتابخانه بسیار کاربردی بوده و ویژگی های جذاب دارد که در این مقاله و مقاله بعدی به بررسی آنها میپردازیم.
ابتدا کتابخانه دیتا بایندیگ را به پروژه اضافه میکنیم. برای این کار کافیست کد زیر را به gradle برنامه اضافه کنیم.
android {
...
dataBinding {
enabled true
}
}
در مرحله بعد باید فایل xml لیوتی که میخواهیم نمایش دهیم را تغییر بدیم. تگ layout را به لیوت اضافه میکنیم(به عنوان تک پدر). به مثال زیر توجه کنید.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
حال باید کدهایمان را تغییر داده و به جای findViewById از دیتابایندینگ استفاده کنیم. چطور این کار را انجام بدیم؟
به جای این کد
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView hello = findViewById(R.id.hello);
hello.setText("Hello World!");
}
می نویسیم
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
binding.hello.setText("Hello World!");
}
اگر از fragment استفاده می کنید میتوانید از روش زیر به ویو ها دسترسی پیدا کنید
به جای این کد
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
TextView hello = view.findViewById(R.id.hello);
hello.setText("Hello World!");
return view.getRootView();
}
می نویسیم
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
FragmentHomeBinding binding = DataBindingUtil.inflate(
inflater, R.layout.fragment_home, container, false);
binding.hello.setText("Hello World!");
return binding.getRoot();
}
به جای کد بالا میتوان از کد ساده تر زیر نیز استفاده کرد.
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
FragmentHomeBinding binding = FragmentHomeBinding.inflate(inflater, container, false);
binding.hello.setText("Hello World!");
return binding.getRoot();
}
فرض کنید در یک صفحه، ۲۰ عدد ویو داشتیم، که فرض دور از واقعیت هم نیست. در این صورت در حالت قبل مجبور بودیم بیست خط findViewById بنویسیم، که با کمک کتابخانه دیتابایندینگ دیگر لازم نیست آن ها را بنویسیم. این ویژگی گفته شده، یکی از ابتدایی ترین مزیت های دیتابایندیگ می باشد.
دیتابایندینگ، مزیت های پیچیده و کاربردی تر دیگری هم دارد که به وسیله آن میتوان در xml متغییر تعریف کنیم و به صورت داینامیک ui را تغییر دهیم. از این مزیت در معماری mvvm به کررات استفاده می شود. در مقاله بعدی به بررسی این ویژگی ها میپردازیم.
لایک و سابسکرایب فراموش نشه. اگر هم سوالی داشتید تو کامنتا برسید! ممنون از همتون
مطلبی دیگر از این انتشارات
دیتا بایندینگ: اضافه کردن متغییر به xml (قسمت دوم)
مطلبی دیگر از این انتشارات
آموزش کانفیگ سیستم مانیتورینگ - Nginx
مطلبی دیگر از این انتشارات
چگونه درخواستهای زمانبر را در جنگو هندل کنیم یا رساله در حکمت مطلقهی celery