Bir Android Gradle projesine Görünüm Bağlama nasıl eklenir

Görünüm Bağlama, görünümlerle etkileşime giren kod yazmayı kolaylaştırır. Android Gradle projenizde bunu nasıl ayarlayacağınız aşağıda açıklanmıştır.

Çoğu Android geliştiricisi muhtemelen klasiklere aşinadır findViewById() yöntem. XML düzeninizdeki Görünümlerden birinin kimliğini iletin; bu Görünümün şişirilmiş sürümüne bir referans döndürecektir. Bunların hepsi doğru kimliği ilettiğinizi ve Görünümün gerçekten var olduğunu varsayar. findViewById() alamadığınız bir Görünümü almaya çalışmanızı engelleyecek yerleşik kontroller yoktur. Görünüm Bağlamayı girin.

Kullanmak yerine findViewById() İstediğiniz her Görünümde, Görünüm Bağlama her düzen XML'i için otomatik olarak bir bağlama sınıfı oluşturur. Kimliği olan her Görünüm sınıfa otomatik olarak eklenir, böylece onlara doğrudan başvurabilirsiniz.

Bir Android Gradle projesine View Binding eklemek son derece basittir.

Gradle Kurulumu

View Binding, Gradle'da modül düzeyinde etkinleştirilir. Birden fazla modülünüz varsa her biri için ayrı ayrı etkinleştirmeniz gerekir.

İçinde android modül seviyenizde engelleyin build.gradleGörünüm Bağlamayı etkinleştirme seçeneğini ekleyin.

android {
...

buildFeatures {
viewBinding true
}
}

Yasadışı erişime ilişkin bir uyarı olabilir, ancak bu bir tüy bırakmayan hatadır ve güvenle göz ardı edilebilir.

Projeyi senkronize ettiğinizde Görünüm Bağlaması etkinleştirilecektir. Bu kadar kolay.

Görünüm Bağlamayı Kullanma

View Binding'i kullanmanın birkaç yolu vardır, ancak bunlardan herhangi biri gerçekleşmeden önce, bağlama sınıflarının nasıl oluşturulduğundan bahsedelim.

Sınıf Adı Söz Dizimi

Adlı bir düzen XML'iniz olduğunu varsayalım. some_layout.xml. Karşılık gelen bağlama sınıfı adlandırılacak SomeLayoutBinding. Bu kalıp tüm dosyalar için geçerlidir.

Her kelime (dosya adında alt çizgilerle ayrılmış olarak) büyük harfle yazılacak ve alt çizgiler kaldırılacaktır. Daha sonra "Bağlama" sonuna eklenir.

Mevcut Görünümle Örnekleme

Düzen dosyasını zaten şişirdiyseniz ve düzenin köküne bir referansınız varsa, View bağlama sınıfına mevcut düzeni kullanmasını söyleyebilirsiniz.

Kotlin:

val binding = SomeLayoutBinding.bind(someLayoutRoot /* should be a View instance */)

Java:

SomeLayoutBinding binding = SomeLayoutBinding.bind(someLayoutRoot /* should be a View instance */);

Örneğin, bir Fragment'te bağlama sınıfını kullanmak isteseydiniz, buna benzer bir şey olurdu.

Kotlin:

classSomeFragment : Fragment(R.layout.some_layout) {
//Lazy initialization means bind() won't be called until "binding" is referenced.
private val binding by lazy { SomeLayoutBinding.bind(view) }

override fun onViewCreated(view: View, savedInstanceState: Bundle?){
super.onViewCreated(view, savedInstanceState)

//Once this method is called, you can start using the binding.
}
}

Java:

publicclassSomeFragmentextendsFragment{
private SomeLayoutBinding binding = null;

publicSomeFragment(){
super(R.layout.some_layout);
}

@Override
publicvoidonViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);

//Initialize the binding.
binding = SomeLayoutBinding.bind(view);
}
}

Yeni Görünümle Örnekleme

Ciltleme sınıfı aynı zamanda düzeni sizin için şişirme işini de üstlenebilir.

Kotlin:

val binding = SomeLayoutBinding.inflate(layoutInflater /* should be a LayoutInflater instance */)

Java:

SomeLayoutBinding binding = SomeLayoutBinding.inflate(layoutInflater /* should be a LayoutInflater instance */);

Bu yöntem hem Parçalarda hem de Etkinliklerde kullanışlıdır.

Bir örnek Parça aşağıdaki gibi bir şeye benzeyecek.

Kotlin:

classSomeFragment : Fragment() {
private val binding by lazy { SomeLayoutBinding.inflate(LayoutInflater.from(requireContext())) }

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?){
//The "root" of the binding class is the root of its layout.
return binding.root
}
}

Java:

publicclassSomeFragmentextendsFragment{
private SomeLayoutBinding binding = null;

@Override
publicvoidonCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
//Initialize the binding.
binding = SomeLayoutBinding.inflate(inflater);
//The "getRoot()" method of the binding class returns the root of the layout.
return binding.getRoot();
}
}

Bir örnek Etkinlik aşağıdaki gibi bir şeye benzeyecek.

Kotlin:

classSomeActivity : AppCompatActivity() {
private val binding by lazy { SomeLayoutBinding.inflate(layoutInflater) }

override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)

//This is equivalent to calling "setContentView(R.layout.some_layout)" but allows use of the binding class.
setContentView(binding.root)
}
}

Java:

publicclassSomeActivityextendsAppCompatActivity{
private SomeLayoutBinding binding = null;

@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

//Instantiate the binding.
binding = SomeLayoutBinding.inflate(getLayoutInflater());
//This is equivalent to calling "setContentView(R.layout.some_layout)" but allows use of the binding class.
setContentView(binding.getRoot());
}
}

Referans Görünümleri

Artık View bağlama sınıfı ayarlandığına ve kullanıma hazır olduğuna göre, onu gerçekten kullanmanın zamanı geldi.

İçeriğini söyleyelim some_layout.xml aşağıdaki gibi bir şeydir:

 android:
...>
android:
...
/>
android:
...
/>
android:
...>
android:
...
/>
LinearLayout>
LinearLayout>

Kodda başvurulacak çok sayıda kimlik var. Ancak bağlama sınıfını somutlaştırdığınız sürece referans vermek kolay olacaktır.

Kotlin'de Görünümlere, bazı değişikliklerle kimlikleriyle eşleşen değişkenler tarafından başvurulur. Alt çizgiler kaldırılır ve ortaya çıkan dize deve şeklindedir. Örneğin, referans vermek için some_frame_layout koddan kullanırsınız binding.someFrameLayout. someFrameLayout değişken FrameLayout'un bir örneği olacaktır.

val someFrameLayout: FrameLayout = binding.someFrameLayout

Java'da Görünümlere, Kotlin'e benzer bir formatta, kimlikleriyle eşleşen alıcı yöntemleriyle başvurulur. Örneğin, referans vermek için some_frame_layout, kullanırsın binding.getSomeFrameLayout(). Yöntem, FrameLayout'un bir örneğini döndürecektir.

FrameLayout someFrameLayout = binding.getSomeFrameLayout();

Görünüm referansları da ciltlemede düzleştirilir. Referans verme inner_imageview referans vermekle aynıdır some_frame_layout.

Çözüm

Gördüğünüz gibi Android'de View Binding'in hem uygulaması hem de kullanımı kolaydır. Çoğu durumda, kullanımı bundan daha kolaydır findViewById().

Görünüm Bağlamayı uygulamaya ilişkin daha fazla ayrıntı ve bazı örnekler için, Google'ın resmi belgelerine göz atın.