Düzen görünümlerini Mimari Bileşenlere bağlama

AndroidX kitaplığı, Mimari'yi içeriyor Bileşenler'i tıklayın. sağlam, test edilebilir ve bakımı yapılabilir uygulamalar tasarlamak için kullanıyor. Veri Bağlama Kitaplığı, mimari ile sorunsuz şekilde çalışır Daha da basitleştiren bileşenler geliştirmenizi sağlar. Uygulamanızdaki düzenler mimari Bileşenler'deki verilere bağlanabilir, böylece Kullanıcı arayüzü denetleyicisinin yaşam döngüsünü yönetme ve kullanıcı arayüzünü verilerdeki değişiklikler hakkında bilgilendirme.

Bu sayfada, mimari Bileşenleri'nin uygulamanıza nasıl dahil edileceği gösterilmektedir en verimli şekilde nasıl kullanacağımızı konuşacağız.

Kullanıcı arayüzünü veri değişiklikleri hakkında bilgilendirmek için LiveData'yı kullanma

LiveData nesnelerini şu şekilde kullanabilirsiniz: değişiklikleri hakkında kullanıcı arayüzünü otomatik olarak bilgilendirmek için veri verileri. Bu Mimari Bileşeni hakkında daha fazla bilgi için LiveData genel bakış bölümüne bakın.

Uygulanabilir Observable - gibi gözlemlenebilir alanlarıLiveData verilere abone olan gözlemcilerin yaşam döngüsü hakkında bilgi sahibi olan nesneler anlamına gelir. Bu bilgiler, avantajları LiveData bölümüne bakın. Android Studio 3.1 ve sonraki sürümlerinde gözlemlenebilir alanları değiştirebilirsiniz veri bağlama kodunuzda LiveData nesne kullanın.

Bağlama sınıfınızla bir LiveData nesnesi kullanmak için bir yaşam döngüsü sahibini (LiveData nesnesinin kapsamını tanımlamak için) kullanın. Aşağıdakiler örnek, bağlama sınıfından sonra etkinliği yaşam döngüsü sahibi olarak belirtir şu örneklendirildi:

Kotlin

class ViewModelActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // Inflate view and obtain an instance of the binding class.
        val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user)

        // Specify the current activity as the lifecycle owner.
        binding.setLifecycleOwner(this)
    }
}

Java

class ViewModelActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Inflate view and obtain an instance of the binding class.
        UserBinding binding = DataBindingUtil.setContentView(this, R.layout.user);

        // Specify the current activity as the lifecycle owner.
        binding.setLifecycleOwner(this);
    }
}

ViewModel kullanabilirsiniz bileşenini düzeninize bağlayın. ViewModel bileşeninde, verileri dönüştürmek veya birden çok veriyi birleştirmek için LiveData nesnesini kullanabilirsiniz kaynaklar. Aşağıdaki örnekte, ViewModel içindeki verilerin nasıl dönüştürüleceği gösterilmektedir:

Kotlin

class ScheduleViewModel : ViewModel() {
    val userName: LiveData

    init {
        val result = Repository.userName
        userName = Transformations.map(result) { result -> result.value }
    }
}

Java

class ScheduleViewModel extends ViewModel {
    LiveData username;

    public ScheduleViewModel() {
        String result = Repository.userName;
        userName = Transformations.map(result, result -> result.value);
    }
}

Kullanıcı arayüzüyle ilgili verileri yönetmek için ViewModel'i kullanma

Veri Bağlama Kitaplığı, ViewModel bileşenleri hakkında daha fazla bilgi edinin. ViewModel düzenin gözlemlediği ve değişikliklerine tepki verdiği verileri gösterir. Kullanım Veri Bağlama Kitaplığı ile ViewModel bileşenleri, kullanıcı arayüzü mantığını taşımanıza olanak tanır daha kolay test edebileceğiniz şekilde oluşturulur. Veriler Bağlama Kitaplığı, görünümlerin verilere bağlı olmasını ve verilerle bağlantısını kaldırmasını sağlar kaynak olarak kullanabilirsiniz. Kalan işlerin büyük bir kısmı, müşterilerin ihtiyaçlarını Böylece doğru verileri sunmuş olursunuz. Bu mimari hakkında daha fazla bilgi için bileşeni hakkında daha fazla bilgi edinmek için ViewModel genel bakış bölümüne bakın.

ViewModel bileşenini Veri Bağlama Kitaplığı ile kullanmak için bileşeninizi örneklendirin ve bu örnek, ViewModel ders, bağlama sınıfınızın örneğini seçin ve ViewModel bileşeninizi bir özelliğini eklemeniz gerekir. Aşağıdaki örnekte, bileşeni şu kitapla ekleyin:

Kotlin

class ViewModelActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        // Obtain the ViewModel component.
        val userModel: UserModel by viewModels()

        // Inflate view and obtain an instance of the binding class.
        val binding: UserBinding = DataBindingUtil.setContentView(this, R.layout.user)

        // Assign the component to a property in the binding class.
        binding.viewmodel = userModel
    }
}

Java

class ViewModelActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Obtain the ViewModel component.
        UserModel userModel = new ViewModelProvider(this).get(UserModel.class);

        // Inflate view and obtain an instance of the binding class.
        UserBinding binding = DataBindingUtil.setContentView(this, R.layout.user);

        // Assign the component to a property in the binding class.
        binding.viewmodel = userModel;
    }
}

Düzeninizde ViewModel bileşeninizin özelliklerini ve yöntemlerini atayın aşağıdaki gösterildiği gibi, bağlama ifadeleri kullanarak karşılık gelen görünümlere örnek:

<CheckBox
    android:id="@+id/rememberMeCheckBox"
    android:checked="@{viewmodel.rememberMe}"
    android:onCheckedChanged="@{() -> viewmodel.rememberMeChanged()}" />

Bağlama bağdaştırıcıları üzerinde daha fazla kontrol için gözlemlenebilir ViewModel kullanma

ViewModel kullanabilirsiniz bileşeni uygulayan bileşen Observable arayüzü diğer hakkında yaptığınız uygulama içeriğine benzer bir şekilde, LiveData nesnesini tanımlayın.

Bir Observable öğesini uygulayan ViewModel bileşeni yaşam döngüsünü kaybetseniz bile LiveData nesnelerini kullanarak LiveData yönetim özellikleri. Şu özelliklere sahip bir ViewModel bileşeni kullanmak: Observable uygulamak, uygulamanızdaki bağlama bağdaştırıcıları üzerinde daha fazla kontrol sahibi olmanızı sağlar. uygulamasını indirin. Örneğin, bu kalıbı kullandığınızda bildirimler üzerinde daha fazla Veriler değiştiğinde, aynı zamanda dönüşüm izleme özelliğini ayarlamak için özel bir yöntem değerini girin.

Gözlemlenebilir ViewModel bileşenini uygulamak için şu özelliklere sahip bir sınıf oluşturmanız gerekir: ViewModel sınıfından devralır ve Observable uygular arayüzü. Bir gözlemci abone olduğunda veya addOnPropertyChangedCallback() ve removeOnPropertyChangedCallback() yöntemlerine göz atın. Ayrıca, özellikler değiştiğinde çalışan özel bir mantık da "the" notifyPropertyChanged() yöntemidir. Aşağıdaki kod örneğinde, ViewModel:

Kotlin

/**
 * A ViewModel that is also an Observable,
 * to be used with the Data Binding Library.
 */
open class ObservableViewModel : ViewModel(), Observable {
    private val callbacks: PropertyChangeRegistry = PropertyChangeRegistry()

    override fun addOnPropertyChangedCallback(
            callback: Observable.OnPropertyChangedCallback) {
        callbacks.add(callback)
    }

    override fun removeOnPropertyChangedCallback(
            callback: Observable.OnPropertyChangedCallback) {
        callbacks.remove(callback)
    }

    /**
     * Notifies observers that all properties of this instance have changed.
     */
    fun notifyChange() {
        callbacks.notifyCallbacks(this, 0, null)
    }

    /**
     * Notifies observers that a specific property has changed. The getter for the
     * property that changes must be marked with the @Bindable annotation to
     * generate a field in the BR class to be used as the fieldId parameter.
     *
     * @param fieldId The generated BR id for the Bindable field.
     */
    fun notifyPropertyChanged(fieldId: Int) {
        callbacks.notifyCallbacks(this, fieldId, null)
    }
}

Java

/**
 * A ViewModel that is also an Observable,
 * to be used with the Data Binding Library.
 */
class ObservableViewModel extends ViewModel implements Observable {
    private PropertyChangeRegistry callbacks = new PropertyChangeRegistry();

    @Override
    protected void addOnPropertyChangedCallback(
            Observable.OnPropertyChangedCallback callback) {
        callbacks.add(callback);
    }

    @Override
    protected void removeOnPropertyChangedCallback(
            Observable.OnPropertyChangedCallback callback) {
        callbacks.remove(callback);
    }

    /**
     * Notifies observers that all properties of this instance have changed.
     */
    void notifyChange() {
        callbacks.notifyCallbacks(this, 0, null);
    }

    /**
     * Notifies observers that a specific property has changed. The getter for the
     * property that changes must be marked with the @Bindable annotation to
     * generate a field in the BR class to be used as the fieldId parameter.
     *
     * @param fieldId The generated BR id for the Bindable field.
     */
    void notifyPropertyChanged(int fieldId) {
        callbacks.notifyCallbacks(this, fieldId, null);
    }
}

Ek kaynaklar

Veri bağlama hakkında daha fazla bilgi için aşağıdakilere bakın ek kaynaklar.

ziyaret edin. ziyaret edin.