KotlinアクティビティーのOnDestroy/FragmentのonDefinyViewの設定を使用して、AndroidでViewBindingを使用して作業を無効にする
Androidは、アプリケーションのGUIコンポーネントを作成するXMLを使用します.ほとんどの開発者はFindViewByIdを使用して、GUIコンポーネントと最初から通信します.
しかし、Jetpackフレームワークには、ViewBindingであるGUIコンポーネントと通信するもう一つの大きな方法があります.
ViewBindingは、FindViewById上でnullと型の安全性を提供します.これは、開発者が実行中に複数の問題を減らすことができます.
ViewBindingを使用するには、モジュールレベルでサポートするように宣言する必要があります
次に、ViewBindingを使用するアクティビティを含むファイルに頭を付けます.私の場合、メインアクティビティを例に挙げます.
こちらはこちら
フラグメント内のViewBindingを使用すると、DeployViewでnullにバインドを設定する必要がある点を除き、アクティビティにも似ています.あなたがなぜそれが疑問である場合には、ここでは、この別の処理に関するスタックオーバーフローに良い答えです.
アクティビティーのOnDeploved / Fragment ' s OnDeployViewの設定
しかし、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コンポーネントを呼び出して、フラグメントクラスの動作を変更できます.
Reference
この問題について(KotlinアクティビティーのOnDestroy/FragmentのonDefinyViewの設定を使用して、AndroidでViewBindingを使用して作業を無効にする), 我々は、より多くの情報をここで見つけました
https://dev.to/theimpulson/working-with-view-binding-in-android-using-kotlin-27gn
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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 =
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)
}
}
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
_binding = FragmentFirstBinding.inflate(inflater, container, false)
return binding.root
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
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
}
}
Reference
この問題について(KotlinアクティビティーのOnDestroy/FragmentのonDefinyViewの設定を使用して、AndroidでViewBindingを使用して作業を無効にする), 我々は、より多くの情報をここで見つけました https://dev.to/theimpulson/working-with-view-binding-in-android-using-kotlin-27gnテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol