همانطور که احتمالا در جریان هستید یکی از مشکلات و دردسرهای دولوپرهای اندروید سر و کله زدن با خطایی به نام null pointer exception
است در اصل ویو بایندینگ جهت هر چه کمتر کردن این خطا که همگی ما حداقل یکبار با آن روبه رو شده ایم توسط گوگل در جت پک قرار گرفت با استفاده از این روش خصوصا در معماری MVVM
میتوانیم با پدیده پرتکراری به نام findViewById
در اپلیکیشن ها خداحافظی کنیم!
پیاده سازی ویوبایندینگ
برای فعال سازی این قابلیت کافیست در فایل build.gradle
کد زیر را اضافه کنیم:
viewBinding{
enabled = true
}
کارکرد این قابلیت به صورتی است که برای لایه های موجود در اپلیکیشن کلاسی معادل با آن میسازد که در هر جایی قابل استفاده است در اصل لایه توسط نرم افزار bind
می شود
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding mainBinding =
ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mainBinding.getRoot());
}
}
همانطور که ملاحظه میکنید نمونه ای از لایه activity_main.xml
ایجاد کردیم که توسط اون میتونیم به هر آی دی متصل بشیم و در اینجا نیازی به findViewById
نیست همچنین در این کلاس متدی استاتیک به نام getRoot
وجود دارد که روت لایه را برمیگرداند اگر به طور نمونه در این لایه یک تکست ویو داشته باشیم به کد زیر:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textViewMain"/>
</RelativeLayout>
در زمان پیاده سازی آن در اکتیویتی خواهیم داشت:
mainBinding.textViewMain.setText("ParsClick");
و در فرگمنت ها خواهیم داشت:
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
mainbinding = FragmentMainBinding.inflate(inflater, container, false);
View view = mainbinding.getRoot();
return view;
}
به همین سادگی!