私はAndroidのインフレとは何かについて多くの投稿を見てきましたが、まだわかりません。誰かがそれが何であるか、そしてなぜ私がそれを必要とするのかを非常に詳細に説明できますか?彼らはそれがXMLコードからオブジェクトを作成し、使用できるか何かであると言います。私は他のほとんどすべてを理解していますが、これは私には意味がありません。
3 に答える
基本的に、ロジック部分をUI部分とは異なるものにするために、XMLの概念が生まれました。
1-XMLでUIを作成するのは簡単で非常に明確です。
2-この分離により、土地/ポートレート/小/通常/大モード用に異なるUIを作成するオプションがあります......
実行時に、XMLは解析され、そこからオブジェクトが作成されます。
Androidプログラム構造では、MVPを使用します。つまり、ビューはプレゼンターとデザインの両方を処理します。つまり、レイアウトxmlです。したがって、他のレイアウトを定義することでxmlのロジックを定義する必要があり、UIの操作を維持するため、つまりUIの動作を変更するためによく使用されます。したがって、レイアウトxmlを対応するビューオブジェクトにロードして操作するためのインフレーションを簡単に行うことができました。
インフレーションを通じて、ビューオブジェクトに対応するUIにアクセスできます。これは誰もが知っていることです。アクティビティクラスのシナリオを検討する
class Activity1 extends Activity{
setContentView(R.layout.Mainlayout);
//here we are inflating the
//view into objects actually
//its is defined in earlier version as
//setContentView(getInflater().inflater(R.layout.MainLayout)
Button b=(Button)findViewById(R.id.button1);
}
しかし、あなたが書くなら
class Activity1 extends Activity{
Button b=(Button)findViewById(R.id.button1);//if called then there will be no errror but form runtimeexception Because of absence of setContext()
}
したがって、クラス内のすべてのUIを導出するには、インフレが必要ですが、実際には、AndroidメーカーがsetContentView()、addviewなどにインフレを組み込んでいるため、初心者はインフレについて理解できません。単純ですが、ボタンの場合は簡単に記述できることを理解する必要があります。 xmlにはボタンしかありません
Button b=(Button)getInflater().inflate(R.layout.button);
Androidでは、LayoutInflatorは次のようなxmlレイアウトの解釈を担当します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
>
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ticketWeb"
/>
</RelativeLayout>
また、xmlの属性から、xmlレイアウト内のすべてのアイテムのJavaオブジェクト表現を「膨張」またはインスタンス化します。したがって、このxmlファイルを含むプロジェクトがある場合、インフレータは、findViewById()を使用して取得できるJavaオブジェクトを作成します。それらのオブジェクトへの参照を取得したら、それらのさまざまなメソッドを呼び出して、それらに関するさまざまなことに影響を与えることができます。