web-dev-qa-db-ja.com

AndroidのLayoutInflaterは何をするのですか?

Androidでの LayoutInflater の使用は何ですか?

313
user386430

ListViewでカスタムビューを使用するときは、行レイアウトを定義する必要があります。 Androidウィジェットを配置するxmlを作成してから、アダプタのコードで次のようにする必要があります。

public MyAdapter(Context context, List<MyObject> objects) extends ArrayAdapter {
  super(context, 1, objects);
  /* We get the inflator in the constructor */
  mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view;
  /* We inflate the xml which gives us a view */
  view = mInflater.inflate(R.layout.my_list_custom_row, parent, false);

  /* Get the item in the adapter */
  MyObject myObject = getItem(position);

  /* Get the widget with id name which is defined in the xml of the row */
  TextView name = (TextView) view.findViewById(R.id.name);

  /* Populate the row's xml with info from the item */
  name.setText(myObject.getName());

  /* Return the generated view */
  return view;
}

公式文書 でもっと読んでください。

160
Macarse

LayoutInflater クラスは、レイアウトXMLファイルを対応するViewオブジェクトにインスタンス化するために使用されます。

つまり、XMLファイルを入力として受け取り、そこからViewオブジェクトを構築します。

267
Pentium10

LayoutInflator は何をしますか?

私が最初にAndroidプログラミングを始めたとき、私は本当にLayoutInflaterfindViewByIdに混乱していました。時には一方を使い、時にはもう一方を使いました。

  • LayoutInflaterは、xmlレイアウトの1つから新しいView(またはLayout)オブジェクトを作成するために使用されます。
  • findViewByIdは、すでに作成されているものよりもビューへの参照を提供するだけです。まだビューを作成していないと思うかもしれませんが、setContentViewonCreateを呼び出すと、アクティビティのレイアウトがそのサブビューとともに背後で膨張(作成)されます。

そのため、ビューがすでに存在する場合は、findViewByIdを使用します。そうでなければ、それからLayoutInflaterでそれを作成してください。

これが私が作ったミニプロジェクトで、LayoutInflaterfindViewByIdの両方を実際に示しています。特別なコードがないと、レイアウトは次のようになります。

enter image description here

青い四角はincludeでメインレイアウトに挿入されたカスタムレイアウトです(詳細については こちら をご覧ください)。コンテンツビューの一部であるため、自動的に膨張しました。ご覧のとおり、このコードについて特別なことは何もありません。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

それでは、カスタムレイアウトのコピーをもう1つ膨らませて(作成して)追加しましょう。

enter image description here

LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);

新しいビューレイアウトを膨らませるために、インフレータにxmlファイルの名前(my_layout)、それを追加したい親レイアウト(mainLayout)、そして実際にはまだ追加したくないことを伝えるだけでした。 (false) (親をnullに設定することもできますが、カスタムレイアウトのルートビューのレイアウトパラメータは無視されます。)

ここでもそれは文脈の中です。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // inflate the main layout for the activity
        setContentView(R.layout.activity_main);

        // get a reference to the already created main layout
        LinearLayout mainLayout = (LinearLayout) findViewById(R.id.activity_main_layout);

        // inflate (create) another copy of our custom layout
        LayoutInflater inflater = getLayoutInflater();
        View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);

        // make changes to our custom layout and its subviews
        myLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.colorAccent));
        TextView textView = (TextView) myLayout.findViewById(R.id.textView);
        textView.setText("New Layout");

        // add our custom layout to the main layout
        mainLayout.addView(myLayout);
    }
}

レイアウトが既に膨らんだ後でのみfindViewByIdがどのように使われるかに注意してください。

補足コード

これは上記の例のxmlです。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/activity_main_layout"
    Android:orientation="horizontal"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:padding="16dp">

    <!-- Here is the inserted layout -->
    <include layout="@layout/my_layout"/>

</LinearLayout>

my_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="100dp"
    Android:layout_height="100dp"
    Android:background="@color/colorPrimary">

    <TextView
        Android:id="@+id/textView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true"
        Android:padding="5dp"
        Android:textColor="@Android:color/white"
        Android:text="My Layout"/>

</RelativeLayout>

いつLayoutInflaterが必要ですか

  • ほとんどの人がこれを使用する最も一般的な時間はRecyclerViewです。 ( リスト または グリッド については、これらのRecyclerViewの例を参照してください。)リストまたはグリッド内の表示されている項目ごとに新しいレイアウトを拡張する必要があります。
  • プログラムで追加したい複雑なレイアウトがある場合は、レイアウトインフレータを使用することもできます(この例で行ったように)。それをすべてコードで実行できますが、最初にxmlで定義してからそれを展開する方がはるかに簡単です。
120
Suragch

LayoutInflater.inflate()は、ビューを定義するres/layout/*。xmlファイルをアプリケーションのソースコードで使用可能な実際のViewオブジェクトに変換する手段を提供します。

基本的な2つのステップ:インフレータを取得してからリソースを膨張させる

インフレータはどうやって手に入れますか?

LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Xmlファイルを "list_item.xml"と仮定してどうやってビューを取得しますか?

View view = inflater.inflate(R.layout.list_item, parent, false);
30
Scott Hellam

これは前の例と似た別の例ですが、それが提供できる拡張パラメータと動的な振る舞いをさらに示すために拡張されています。

ListViewの行レイアウトに可変数のTextViewを含めることができるとします。そのため、最初に基本アイテムのViewを膨張させ(前の例と同じ)、次に実行時にTextViewを動的に追加しながらループします。 Androidの使用:layout_weightはさらにすべてを完璧に揃えます。

これがレイアウトのリソースです。

list_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent" 
    Android:layout_height="wrap_content" 
    Android:orientation="horizontal" >
    <TextView 
        Android:id="@+id/field1"
        Android:layout_width="0dp"  
        Android:layout_height="wrap_content" 
        Android:layout_weight="2"/>
    <TextView 
        Android:id="@+id/field2"
        Android:layout_width="0dp"  
        Android:layout_height="wrap_content" 
        Android:layout_weight="1"
/>
</LinearLayout>

schedule_layout.xml

<?xml version="1.0" encoding="utf-8"?>
   <TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="0dp"  
    Android:layout_height="wrap_content" 
    Android:layout_weight="1"/>

BaseAdapterクラスの拡張でgetViewメソッドをオーバーライドする

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = activity.getLayoutInflater();
    View lst_item_view = inflater.inflate(R.layout.list_layout, null);
    TextView t1 = (TextView) lst_item_view.findViewById(R.id.field1);
    TextView t2 = (TextView) lst_item_view.findViewById(R.id.field2);
    t1.setText("some value");
    t2.setText("another value");

    // dinamically add TextViews for each item in ArrayList list_schedule
    for(int i = 0; i < list_schedule.size(); i++){
        View schedule_view = inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false);
        ((TextView)schedule_view).setText(list_schedule.get(i));
        ((ViewGroup) lst_item_view).addView(schedule_view);
    }
    return lst_item_view;
}

さまざまなinflateメソッド呼び出し

inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams
22
MSquare

このクラスは、レイアウトXMLファイルを対応するViewオブジェクトにインスタンス化するために使用されます。直接使用されることはありません - 現在のコンテキストに既に接続されていて、実行しているデバイス用に正しく構成されている標準のLayoutInflaterインスタンスを取得するためにgetLayoutInflater()またはgetSystemService(String)を使用します。例えば:

LayoutInflater inflater = (LayoutInflater)context.getSystemService
      (Context.LAYOUT_INFLATER_SERVICE);

参照: http://developer.Android.com/reference/Android/view/LayoutInflater.html

膨らませるとは、レイアウト(またはGUI要素)を記述するXMLファイルを読み取り、それに対応する実際のオブジェクトを作成して、そのオブジェクトをAndroidアプリ内で表示できるようにすることを意味します。

final Dialog mDateTimeDialog = new Dialog(MainActivity.this);

// Inflate the root layout
final RelativeLayout mDateTimeDialogView = (RelativeLayout) getLayoutInflater().inflate(R.layout.date_time_dialog, null);

// Grab widget instance
final DateTimePicker mDateTimePicker = (DateTimePicker) mDateTimeDialogView.findViewById(R.id.DateTimePicker);

このファイルはdate_time_dialog.xmlとして保存できます。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/DateTimeDialog" Android:layout_width="100px"
    Android:layout_height="wrap_content">
    <com.dt.datetimepicker.DateTimePicker
            Android:id="@+id/DateTimePicker" Android:layout_width="fill_parent"
            Android:layout_height="wrap_content" />
    <LinearLayout Android:id="@+id/ControlButtons"
            Android:layout_width="fill_parent" Android:layout_height="wrap_content"
            Android:layout_below="@+id/DateTimePicker"
            Android:padding="5dip">
            <Button Android:id="@+id/SetDateTime" Android:layout_width="0dip"
                    Android:text="@Android:string/ok" Android:layout_weight="1"
                    Android:layout_height="wrap_content"
                   />
            <Button Android:id="@+id/ResetDateTime" Android:layout_width="0dip"
                    Android:text="Reset" Android:layout_weight="1"
                    Android:layout_height="wrap_content"
                    />
            <Button Android:id="@+id/CancelDialog" Android:layout_width="0dip"
                    Android:text="@Android:string/cancel" Android:layout_weight="1"
                    Android:layout_height="wrap_content"
                     />
    </LinearLayout>

このファイルはdate_time_picker.xmlとして保存できます。

 <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent" Android:layout_height="wrap_content" `enter code here`
    Android:padding="5dip" Android:id="@+id/DateTimePicker">
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:baselineAligned="true"
Android:orientation="horizontal">

    <LinearLayout
    Android:id="@+id/month_container"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="1dp"
    Android:layout_marginTop="5dp"
    Android:layout_marginRight="5dp"
    Android:layout_marginBottom="5dp"
    Android:gravity="center"
    Android:orientation="vertical">
    <Button
        Android:id="@+id/month_plus"
        Android:layout_width="45dp"
        Android:layout_height="45dp"  
        Android:background="@drawable/image_button_up_final"/>
    <EditText
        Android:id="@+id/month_display"
        Android:layout_width="45dp"
        Android:layout_height="35dp"
        Android:background="@drawable/picker_middle"
        Android:focusable="false"
        Android:gravity="center"
        Android:singleLine="true"
        Android:textColor="#000000">
    </EditText>
    <Button
        Android:id="@+id/month_minus"
        Android:layout_width="45dp"
        Android:layout_height="45dp"       
        Android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
    Android:id="@+id/date_container"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="0.5dp"
    Android:layout_marginTop="5dp"
    Android:layout_marginRight="5dp"
    Android:layout_marginBottom="5dp"
    Android:gravity="center"
    Android:orientation="vertical">
    <Button
        Android:id="@+id/date_plus"
        Android:layout_width="45dp"
        Android:layout_height="45dp"       
        Android:background="@drawable/image_button_up_final"/>
    <EditText
        Android:id="@+id/date_display"
        Android:layout_width="45dp"
        Android:layout_height="35dp"
        Android:background="@drawable/picker_middle"
        Android:gravity="center"
        Android:focusable="false"
        Android:inputType="number"
        Android:textColor="#000000"
        Android:singleLine="true"/>
    <Button
        Android:id="@+id/date_minus"
        Android:layout_width="45dp"
        Android:layout_height="45dp"      
        Android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
    Android:id="@+id/year_container"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="0.5dp"
    Android:layout_marginTop="5dp"
    Android:layout_marginRight="5dp"
    Android:layout_marginBottom="5dp"
    Android:gravity="center"
    Android:orientation="vertical">
    <Button
        Android:id="@+id/year_plus"
        Android:layout_width="45dp"
        Android:layout_height="45dp"       
            Android:background="@drawable/image_button_up_final"/>
    <EditText
        Android:id="@+id/year_display"
        Android:layout_width="45dp"
        Android:layout_height="35dp"
        Android:background="@drawable/picker_middle"
        Android:gravity="center"
        Android:focusable="false"
        Android:inputType="number"
        Android:textColor="#000000"
        Android:singleLine="true"/>
    <Button
        Android:id="@+id/year_minus"
        Android:layout_width="45dp"
        Android:layout_height="45dp"       
        Android:background="@drawable/image_button_down_final"/>
</LinearLayout>
<LinearLayout
        Android:id="@+id/hour_container"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="5dp"
        Android:layout_marginRight="5dp"
        Android:layout_marginTop="5dp"
        Android:layout_marginBottom="5dp"
        Android:gravity="center"
        Android:orientation="vertical">
        <Button
            Android:id="@+id/hour_plus"
            Android:layout_width="45dp"
            Android:layout_height="45dp"          
            Android:background="@drawable/image_button_up_final"/>
        <EditText
            Android:id="@+id/hour_display"
            Android:layout_width="45dp"
            Android:layout_height="35dp"
            Android:background="@drawable/picker_middle"
            Android:gravity="center"
            Android:focusable="false"
            Android:inputType="number"
            Android:textColor="#000000"
            Android:singleLine="true">
        </EditText>
        <Button
            Android:id="@+id/hour_minus"
            Android:layout_width="45dp"
            Android:layout_height="45dp"       
            Android:background="@drawable/image_button_down_final"/>
    </LinearLayout>
    <LinearLayout
        Android:id="@+id/min_container"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="0.35dp"
        Android:layout_marginTop="5dp"
        Android:layout_marginRight="5dp"
        Android:layout_marginBottom="5dp"
        Android:gravity="center"
        Android:orientation="vertical">
        <Button
            Android:id="@+id/min_plus"
            Android:layout_width="45dp"
            Android:layout_height="45dp"       
            Android:background="@drawable/image_button_up_final"/>
        <EditText
            Android:id="@+id/min_display"
            Android:layout_width="45dp"
            Android:layout_height="35dp"
            Android:background="@drawable/picker_middle"
            Android:gravity="center"
            Android:focusable="false"
            Android:inputType="number"
            Android:textColor="#000000"
            Android:singleLine="true"/>
        <Button
            Android:id="@+id/min_minus"
            Android:layout_width="45dp"
            Android:layout_height="45dp"       
            Android:background="@drawable/image_button_down_final"/>
    </LinearLayout>

    <LinearLayout 
        Android:id="@+id/meridiem_container"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="0.35dp"
        Android:layout_marginTop="5dp"
        Android:layout_marginRight="5dp"
        Android:layout_marginBottom="5dp"
        Android:gravity="center"
        Android:orientation="vertical">
        <ToggleButton 
            Android:id="@+id/toggle_display"
            style="@style/SpecialToggleButton"
            Android:layout_width="40dp"
            Android:layout_height="32dp"
            Android:layout_marginLeft="5dp"
            Android:layout_marginTop="45dp"
            Android:layout_marginRight="5dp"
            Android:layout_marginBottom="5dp"
            Android:padding="5dp"
            Android:gravity="center"
            Android:textOn="@string/meridiem_AM"
            Android:textOff="@string/meridiem_PM"
            Android:checked="true"/>

           <!--  Android:checked="true" --> 

    </LinearLayout>
</LinearLayout>
</RelativeLayout>

MainActivityクラスはMainActivity.Javaとして保存されました:

public class MainActivity extends Activity {
    EditText editText;
    Button button_click;
    public static Activity me = null;
    String meridiem;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText)findViewById(R.id.edittext1);
        button_click = (Button)findViewById(R.id.button1);
        button_click.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view){
                final Dialog mDateTimeDialog = new Dialog(MainActivity.this);
                final RelativeLayout mDateTimeDialogView = (RelativeLayout)   getLayoutInflater().inflate(R.layout.date_time_dialog, null);
                final DateTimePicker mDateTimePicker = (DateTimePicker) mDateTimeDialogView.findViewById(R.id.DateTimePicker);
                // mDateTimePicker.setDateChangedListener();
                ((Button) mDateTimeDialogView.findViewById(R.id.SetDateTime)).setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        mDateTimePicker.clearFocus();
                        int hour = mDateTimePicker.getHour();
                        String result_string = mDateTimePicker.getMonth() +" "+   String.valueOf(mDateTimePicker.getDay()) + ", " + String.valueOf(mDateTimePicker.getYear())
                        + "  " +(mDateTimePicker.getHour()<=9? String.valueOf("0"+mDateTimePicker.getHour()) : String.valueOf(mDateTimePicker.getHour())) + ":" + (mDateTimePicker.getMinute()<=9?String.valueOf("0"+mDateTimePicker.getMinute()):String.valueOf(mDateTimePicker.getMinute()))+" "+mDateTimePicker.getMeridiem();
                        editText.setText(result_string);
                        mDateTimeDialog.dismiss();
                    }
                });
                // Cancel the dialog when the "Cancel" button is clicked
                ((Button) mDateTimeDialogView.findViewById(R.id.CancelDialog)).setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        mDateTimeDialog.cancel();
                    }
                });
                // Reset Date and Time pickers when the "Reset" button is clicked
                ((Button) mDateTimeDialogView.findViewById(R.id.ResetDateTime)).setOnClickListener(new OnClickListener() {
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        mDateTimePicker.reset();
                    }
                });

                // Setup TimePicker
                // No title on the dialog window
                mDateTimeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                // Set the dialog content view
                mDateTimeDialog.setContentView(mDateTimeDialogView);
                // Display the dialog
                mDateTimeDialog.show();
            }
        });
    }
}
8
Jijo

インフレータは何をするのか

これはxmlレイアウトを入力(例えば)として受け取り、それをViewオブジェクトに変換します。

なぜ必要なのか

カスタムリストビューを作成する必要があるシナリオを考えてみましょう。各行はカスタムになります。しかし、どうすればそれができますか。リストビューの行にxmlレイアウトを割り当てることはできません。それで、Viewオブジェクトを作成します。したがって、その中の要素(textview、imageviewなど)にアクセスし、そのオブジェクトをlistviewの行として割り当てることもできます。

そのため、ビュー型オブジェクトをどこかに割り当てる必要があり、カスタムxmlデザインがある場合は、インフレータによってそれをオブジェクトに変換して使用します。

6
Zahan Safallwa

これは、レイアウトのルートViewの参照を取得して展開し、setContentView(View view)で使用するための例です。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LayoutInflater li=getLayoutInflater();
    View rootView=li.inflate(R.layout.activity_main,null);
    setContentView(rootView);


}
5
Gal Rom

LayoutInflater は、レイアウトXMLファイルを、Javaプログラムで使用できる対応するビューオブジェクトにインスタンス化するために使用されるクラスです。簡単に言えば、AndroidでUIを作成する方法は2つあります。 1つは静的な方法であり、もう1つは動的またはプログラムによるものです。次のように1つのtextviewと1つのedittextを持つ単純なレイアウトmain.xmlがあるとします。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:id="@+id/layout1"
    >
<TextView
        Android:id="@+id/namelabel"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Enter your name"
        Android:textAppearance="?android:attr/textAppearanceLarge" >
    </TextView>
    <EditText
        Android:id="@+id/name"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentLeft="true"
        Android:layout_marginTop="14dp"
        Android:ems="10">
    </EditText>
</LinearLayout>

このレイアウトを静的に表示することができます。

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

動的にビューを作成する方法は、そのビューがmain.xmlに記述されていないことを意味しますが、実行時にこれを使用して表示する必要があります。たとえば、footer.xmlとして別のXMLがレイアウトフォルダにあります。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/TextView1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:gravity="center_horizontal"
    Android:text="Add your record"
    Android:textSize="24sp" >
 </TextView>

このテキストボックスを実行時にメインのUI内に表示したいです。そこで、ここでtext.xmlを膨らませます。方法を参照してください。

public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  final LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  TextView t = (TextView)inflater.inflate(R.layout.footer,null);

  lLayout = (LinearLayout)findViewById(R.id.layout1);
  lLayout.addView(t);

ここでは、LayoutInflaterインスタンスを取得するためにgetSystemService(String)を使用しました。以下のようにgetSystemService(String)を使用する代わりに、getLayoutInflator()を使用して膨らませることもできます。

LayoutInflator inflater = getLayoutInflater();
TextView t = (TextView) inflater.inflate(R.layout.footer, null);
lLayout.addView(t);
4
Arry

レイアウトインフレータは、xml外観の説明を読み込み、それらをJavaベースのViewオブジェクトに変換するクラスです。

1
Muhammed Shibin

Inflaterは実際にはデータ、ビュー、インスタンス、可視のUI表現へのある種の変換です。それはおそらくプログラム的にアダプタなどからデータフィードを利用するのです。それからそれをあなたが定義したxmlと統合します、それはデータがどのようにUIで表されるべきであるかをそれに伝えます

0
user6684451

LayoutInflaterは、XMLで定義されたレイアウトに基づいてViewオブジェクトを作成します。カスタムビューの作成、アクティビティビューへのフラグメントビューの拡大、ダイアログの作成、レイアウトファイルビューのアクティビティへの拡大など、LayoutInflaterを使用する方法はいくつかあります。

インフレプロセスがどのように機能するかについては、多くの誤解があります。私はこれがinflate()メソッドのためのドキュメンテーションの不足から来ていると思います。 inflate()メソッドについて詳しく知りたい場合は、ここにブログ記事を書きました。

https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/

0
seanjfarrell

LayoutInflaterは、Androidの基本的なコンポーネントです。 XMLファイルをビュー階層に変換するには、常にこれを使用する必要があります。

0
vishwas

私のカスタマイズリストはそれが概念を説明することを願っています

public class second extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);
//  TextView textview=(TextView)findViewById(R.id.textView1);
//  textview.setText(getIntent().getExtras().getString("value"));

    setListAdapter(new MyAdapter(this,R.layout.list_item,R.id.textView1, getResources().getStringArray(R.array.counteries)));
}

private class MyAdapter extends ArrayAdapter<String>{

    public MyAdapter(Context context, int resource, int textViewResourceId,
            String[] objects) {
        super(context, resource, textViewResourceId, objects);
        // TODO Auto-generated constructor stub
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater=(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row=inflater.inflate(R.layout.list_item,parent,false);
        String[]items=getResources().getStringArray(R.array.counteries);

        ImageView iv=(ImageView) row.findViewById(R.id.imageView1);
        TextView tv=(TextView) row.findViewById(R.id.textView1);
        tv.setText(items[position]);

        if(items[position].equals("unitedstates")){
            iv.setImageResource(R.drawable.usa);
        }else   if(items[position].equals("Russia")){
            iv.setImageResource(R.drawable.russia);
        }else   if(items[position].equals("Japan")){
            iv.setImageResource(R.drawable.japan);
        }
        // TODO Auto-generated method stub
        return row;
    }

}

}
0