Android에서 LayoutInflater는 무엇을 합니까?
안드로이드에서 어떤 용도로 사용됩니까?
LayoutInflater 클래스는 레이아웃 XML 파일의 내용을 해당 View 개체로 인스턴스화하는 데 사용됩니다.
즉, XML 파일을 입력으로 받아 이로부터 View 객체를 구축합니다.
무슨 일을 합니까?
안드로이드 프로그래밍을 처음 시작했을 때, 저는 정말 혼란스러웠습니다.LayoutInflater
그리고.findViewById
하기도 하고, 하나를 사용하기도 . 때로는 하나를 사용하기도 하고, 때로는 다른 하나를 사용하기도 했습니다.
LayoutInflater
새 파일을 만드는 데 사용됩니다.View
(또는Layout
layouts.xml 입니다 의 입니다 중 하나입니다.findViewById
이미 작성된 보기에 대한 참조만 제공합니다.아직 보기를 만들지 않았다고 생각할 수도 있지만, 전화를 걸 때마다setContentView
인에onCreate
, , , , , , , , , , , , , .
존재하는 에는 가 하는 을 합니다 합니다 을 을 사용합니다.findViewById
. 그렇지 않은 경우, 다음을 사용하여 작성합니다.LayoutInflater
.
예
여기에 두 가지를 모두 보여주는 제가 만든 미니 프로젝트가 있습니다.LayoutInflater
그리고.findViewById
◦ 가 없는 은 이렇게 특별한 코드가 없는 레이아웃은 이렇게 생겼습니다.
은 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δinclude
(자세한 내용은 여기 참조).내용 보기에 포함되어 있기 때문에 자동으로 부풀려집니다.보시다시피 코드에 특별한 것은 없습니다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
이제 사용자 지정 레이아웃의 복사본을 한 개 더 부풀려서 추가해 보겠습니다.
LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);
레이아웃을 한에 제 파일의 이었습니다.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_my.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>
레이아웃 인플레이터가 필요한 시기
- 대부분의 사람들이 그것을 사용하는 가장 흔한 시간은.
RecyclerView
(이 항목 참조)RecyclerView
목록 또는 그리드에 대한 예제입니다.)목록 또는 그리드에 표시되는 모든 항목에 대해 새 레이아웃을 부풀려야 합니다. - 예제에서와 같이 프로그래밍 방식으로 추가하려는 복잡한 레이아웃이 있는 경우 레이아웃 인플레이터를 사용할 수도 있습니다.코드로 모든 것을 할 수 있지만, 먼저 xml로 정의한 후에 부풀리는 것이 훨씬 쉽습니다.
를 하는 에서 사용자 정의 보기를 하는 경우ListView
행 레이아웃을 정의해야 합니다.안드로이드 위젯을 배치하는 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;
}
공식 문서를 자세히 읽어 보십시오.
LayoutInflater.inflate()는 뷰를 정의하는 res/layout/*.xml 파일을 응용 프로그램 소스 코드에서 사용할 수 있는 실제 View 개체로 변환하는 수단을 제공합니다.
기본적인 두 가지 단계: 인플레이터를 가져온 다음 리소스를 부풀립니다.
인플레이터는 어떻게 구합니까?
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
xml 파일이 "list_item.xml"이라고 가정하면 어떻게 뷰를 얻을 수 있습니까?
View view = inflater.inflate(R.layout.list_item, parent, false);
여기에는 이전 예와 유사하지만 팽창 매개 변수와 동적 동작을 보다 자세히 보여주기 위해 확장된 예가 있습니다.
ListView 행 레이아웃에 가변적인 TextView 수가 있다고 가정합니다.따라서 먼저 이전 예와 마찬가지로 기본 항목 View를 부풀린 다음 런타임에 TextView를 동적으로 추가합니다.Android:layout_weight를 사용하면 모든 것이 완벽하게 정렬됩니다.
레이아웃 리소스는 다음과 같습니다.
list_graph.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_schedule.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;
}
다른 부풀리기 방법 호출을 참고합니다.
inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams
이 하는 Δ XML Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ View
물건들. 는 절대 -- 직접적으로사용하지않습니다 -- 않습니다사용하지 --을 사용합니다.getLayoutInflater()
아니면getSystemService(String)
을을 LayoutInflater
현재 컨텍스트에 이미 연결되어 있고 실행 중인 장치에 대해 올바르게 구성된 인스턴스입니다.예를 들어,
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
참조 : http://developer.android.com/reference/android/view/LayoutInflater.html
LayoutInflater는 레이아웃 XML 파일을 Java 프로그램에서 사용할 수 있는 해당 뷰 객체로 인스턴스화하는 데 사용되는 클래스입니다.간단히 말해서, 안드로이드에서 UI를 만드는 방법은 두 가지가 있습니다.하나는 정적인 방식이고 다른 하나는 동적이거나 프로그래밍적인 방식입니다.단순한 layout main.xml 가 있다고 가정하자.textview
그리고 하나edittext
하기와 같이
<?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);
여기서는 getSystemService(String)를 사용하여 LayoutInflater 인스턴스를 검색했습니다.아래와 같이 getSystemService(String)를 사용하는 대신 getLayoutInflator()를 사용하여 부풀릴 수도 있습니다.
LayoutInflator inflater = getLayoutInflater();
TextView t = (TextView) inflater.inflate(R.layout.footer, null);
lLayout.addView(t);
부풀리기는 레이아웃(또는 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();
}
});
}
}
인플레이터가 하는 일
xml 레이아웃을 입력(say)으로 받아 View 객체로 변환합니다.
필요한 이유
사용자 정의 리스트 뷰를 생성해야 하는 시나리오를 생각해 보겠습니다.이제 각 행은 맞춤형이어야 합니다.하지만 어떻게 해야 하죠?리스트뷰 행에 xml 레이아웃을 할당할 수 없습니다.그래서 View 개체를 만듭니다.따라서 그 안에 있는 요소(텍스트 뷰, 이미지 뷰 등)에 접근할 수 있고 객체를 리스트 뷰의 행으로 지정할 수도 있습니다.
따라서 뷰 유형 개체를 어딘가에 할당해야 할 때마다 맞춤형 xml 설계를 통해 개체로 변환하여 사용합니다.
레이아웃의 root View에 대한 참조를 가져와 레이아웃을 부풀려 setContentView(View)와 함께 사용하는 예는 다음과 같습니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater li=getLayoutInflater();
View rootView=li.inflate(R.layout.activity_main,null);
setContentView(rootView);
}
Layout inflater는 xml 모양 설명을 읽고 자바 기반 View 객체로 변환하는 클래스입니다.
LayoutInflater는 XML에 정의된 레이아웃을 기반으로 뷰 객체를 작성합니다. LayoutInflater를 사용하는 방법에는 사용자 정의 뷰 작성, 조각 뷰를 활동 뷰로 부풀리기, 대화상자 작성 또는 레이아웃 파일 뷰를 활동으로 부풀리기 등 여러 가지가 있습니다.
인플레이션 과정이 어떻게 작동하는지에 대한 오해가 많습니다.이것은 인플레() 방식에 대한 서류가 부실해서 나온 것이라고 생각합니다.인플레() 방법에 대해 자세히 알고 싶다면 여기에 블로그에 글을 올렸습니다.
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
나의 커스터마이징 리스트는 컨셉을 설명해주길 바랍니다.
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;
}
}
}
레이아웃 인플레이터는 안드로이드의 기본 구성 요소입니다.xml 파일을 보기 계층으로 변환하려면 항상 이 파일을 사용해야 합니다.
실제로 데이터, 보기, 인스턴스, 가시적 UI 표현 등으로 일종의 변환을 통해 데이터 피드를 프로그래밍 방식으로 사용할 수 있습니다.그런 다음 정의한 xml과 통합하여 UI에서 데이터를 어떻게 표현해야 하는지 알려줍니다.
언급URL : https://stackoverflow.com/questions/3477422/what-does-layoutinflater-in-android-do
'source' 카테고리의 다른 글
jQuery 텍스트 상자 변경 이벤트는 텍스트 상자가 초점을 잃을 때까지 발생하지 않습니까? (0) | 2023.09.14 |
---|---|
디렉토리의 모든 파일을 읽고 개체에 저장한 후 개체 전송 (0) | 2023.09.14 |
jQuery로 html5 필수 특성 제거 (0) | 2023.09.09 |
C에서 컴파일러 작성자에게 'auto' 키워드가 유용한 이유는 무엇입니까? (0) | 2023.09.09 |
Python의 예쁜 그래프와 차트 (0) | 2023.09.09 |