آموزش DataBinding شماره 1

پرسیده شده
فعالیت 1059 روز پیش
دیده شده 681 بار
3

سلام دوستان بعد مدت ها فعال شدم توی سون لرن و میخوام تجربیاتی که تو این یک سال کارکردنم رو باهاتون به اشتراک بزارم امیدوارم استقبال بشه البته دوست داشتم توی پایگاه دانش ثبت بشه ولی حوصله نداشتم پیام بدم به پشتیبانی و ,‘,,.
خلاصه که همینجا براتون مطرح میکنم سوالی براتون پیش اومد میتونید ازم بپرسید با جون و دل پاسخ میدم :)))


خب data binding چیه و ما چرا اصن باید ازش استفاده کنیم؟

 

ابتدا تعریفی که توی داکیومنت اندروید هست رو براتون میارم:
 

The Data Binding Library is a support library that allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.
 

خب طبق این تعریف دیتا بایندیگ یک ساپورت لایبرری هستش که لایه دیتا رو به لایه ui متصل میکنه و ما رو از استفاده از findViewById به صفر میرسونه(چه عالی) ولی خب ما ViewBinding هم داریم اون چیه؟ باید بگم که اون هم مثل data binding برای ما instance ویو هامون رو میسازه و در دسترس قرار میده ولی هیچ دیتایی در اختیار لایه ui قرار نمیده!!
یک مثال بهتر اگه view binding رو یک جاده یک طرفه از سمت ui به لایه منطق بدونیم data binding یه جاده  دو طرفه بین  این دو برای ما ایجاد میکنه :))))

اضافه کردن به پروژه

 

خب توی build.gradle سطح ماژول خودتون این قسمت رو اضافه کنید:

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

 

نحوه استفاده از data binding 

 

خب توی فایل های layout خودمون این الگو رو قرار میدیم

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
     	  <variable
            name="viewmodel"
            type="com.myapp.data.ViewModel" />
    </data>
    <ConstraintLayout... /> <!-- UI layout's root element -->
</layout>

در قسمت data میتونیم variable تعریف کنیم یا کلاسی رو import کنیم، جای ConstraintLayout زیاد مهم نیست و میتونید با root element خودتون جایگزین کنید. نکته ای که حائز اهمیت هست اینه که برای دسترسی به element های ویو خودتون حتما باید برای آیدی تعریف کنید! (البته یکبار باید build بگیرید).

در کلاس هامون هم باید اول یک instance از data binding بسازید تا بتونید از اون استفاده کنید:

class LoginWithPasswordFragment : BaseFragment() {


    private lateinit var binding: FragmentLoginWithPasswordBinding
    private val viewModel: LoginWithPasswordViewModel by viewModels()


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_login_with_password, container, false)
        binding.lifecycleOwner = this.viewLifecycleOwner
        binding.viewModel = this.viewModel

        return binding.root
    }

همونطور که میبینید حتما باید lifecycleOwner  رو پاس بدید بهش و اینکه میبینید که من viewModel رو بهش دادم بخاطر این هست که توی variable هام توی layout تعریف کرده بودم!

خب تا اینجا بسه به نظرم اگه استقبال شد ادامه میدم و حتی شاید چند قسمت ضبط کنم براتون نمیدونم :)))))))

فایل پیوست

علی باقری
علی باقری

1 خرداد 00

0
حذف شده

سلام علی جان 

 

ممنونم از وقتی که گذاشتی اموزش عالی بود

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

5 خرداد 00