KotlinアクティビティーのOnDestroy/FragmentのonDefinyViewの設定を使用して、AndroidでViewBindingを使用して作業を無効にする


Androidは、アプリケーションのGUIコンポーネントを作成するXMLを使用します.ほとんどの開発者はFindViewByIdを使用して、GUIコンポーネントと最初から通信します.
しかし、Jetpackフレームワークには、ViewBindingであるGUIコンポーネントと通信するもう一つの大きな方法があります.
ViewBindingは、FindViewById上でnullと型の安全性を提供します.これは、開発者が実行中に複数の問題を減らすことができます.

用途


有効化サポート


ViewBindingを使用するには、モジュールレベルでサポートするように宣言する必要がありますbuild.gradle Androidセクションの下のファイル.
android {
    buildFeatures {
        viewBinding true
    }
}
Android Studioでは、プロジェクトでGradleの変更を同期させるよう促します.これを行うと、モジュール内のすべてのレイアウトファイルのバインドクラスが生成されます.これらの生成されたクラスを使用してGUIコンポーネントと通信します.

アクティビティの使用


次に、ViewBindingを使用するアクティビティを含むファイルに頭を付けます.私の場合、メインアクティビティを例に挙げます.
こちらはこちらMainActivity.kt 今すぐファイルが見える
package dev.theimpulson.viewbinding

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
次に、ViewBindingを使用するには、ActivityMainBinding型のプライベートLateInit Varを宣言します.結合型は、特定のバインディングを生成するために使用されるレイアウトの後に名前が付けられます.
private lateinit var binding: ActivityMainBinding
アクティビティーのインスタンスを取得するには、OnCreateメソッドを変更して、InflateメソッドでAcitVityMainBindingのインスタンスを作成します.
binding = ActivityMainBinding.inflate(layoutInflater)
これで、このバインド変数を使用してGUIコンポーネントにアクセスできます.ビューのバインドを使用するには、SetContentViewを変更します.これはrootプロパティを使用して行うことができます.
setContentView(binding.root)
こちらはこちらMainActivity.kt ビューバインディングのサポートを有効にしたあとの外観
package dev.theimpulson.viewbinding

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import dev.theimpulson.codepurviewbinding.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}
そしてそれです.現在、アクティビティクラスはViewBindingを使用してGUIコンポーネントと通信する準備ができました.以前に作成したバインド変数のプロパティとしてidを使用してコンポーネントを呼び出します.

断片で使う


フラグメント内のViewBindingを使用すると、DeployViewでnullにバインドを設定する必要がある点を除き、アクティビティにも似ています.あなたがなぜそれが疑問である場合には、ここでは、この別の処理に関するスタックオーバーフローに良い答えです.

アクティビティーのOnDeploved / Fragment ' s OnDeployViewの設定


Oct 14 ' 14
コメント: 1
回答:2
42

リストフラグメントソースコードを読んでいます.
ListAdapter mAdapter;
ListView mList;
View mEmptyView;
TextView mStandardEmptyView;
View mProgressContainer;
View mListContainer;
CharSequence mEmptyText;
boolean mListShown;

/**
 * Detach from list view.
 */
@Override
public void onDestroyView() {
    mHandler.removeCallbacks(mRequestFocus);
    mList = null;
    mListShown = false;
    mEmptyView = mProgressContainer =

Open Full Question
私はFirstFragmentクラスを使用して、これを行う方法を示します.こちらはこちらFirstFragment.kt ビューバインディングを使用する前の外観
package dev.theimpulson.viewbinding

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

class FirstFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_first, container, false)
    }

}
ここで、FragmentFirstBinding型のプライベートVarを作成します.これは、最初の変数の非NULLインスタンスを取得するための取得メソッドを持つプライベートvalと同様にNULLです.
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
次に、OnCreateViewを変更して、最初の変数をインスタンス化してフラグメントを展開します.これを実現するために、OnCreateViewが引数として受け入れるインフレータとコンテナーを使用します.
_binding = FragmentFirstBinding.inflate(inflater, container, false)
アクティビティーと同様に、ルートプロパティを使用してビューを返すことができます.
return binding.root
フラグメントが破壊された後、そのビューが解放されることを保証するために、変数をDefaultに設定してください.
override fun onDestroyView() {
    super.onDestroyView()
    _binding = null
}
こちらはこちらFirstFragment.kt ビューバインディングのサポートを追加した後の
package dev.theimpulson.viewbinding

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import dev.theimpulson.codepurviewbinding.databinding.FragmentFirstBinding

class FirstFragment : Fragment() {
    private var _binding: FragmentFirstBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = FragmentFirstBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }

}
そして、それはすべてです.これで、バインド変数を使用して、必要なGUIコンポーネントを呼び出して、フラグメントクラスの動作を変更できます.