LayoutInflater
Android'de kullanımı nedir ?
LayoutInflater
Android'de kullanımı nedir ?
Yanıtlar:
Bir özel görünüm kullandığınızda ListView
satır düzenini tanımlamanız gerekir. Android widget'larını yerleştirdiğiniz bir xml oluşturursunuz ve daha sonra adaptörün kodunda böyle bir şey yapmanız gerekir:
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;
}
Resmi belgelerden daha fazla bilgi edinin .
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
, ancak nerede kullanılacağını açıklıyor. Cevap 1-down daha iyidir.
LayoutInflater sınıfı bunlara karşılık gelen Görüntüle nesneleri içine Düzen XML dosyalarının içeriğini oluşturmak için kullanılır.
Başka bir deyişle, bir XML dosyasını girdi olarak alır ve View nesnelerini buradan oluşturur.
single_list_item.xml
her bir satırı için bir dosyam var ListView
. Bu XML dosyasının kullanımı bir tür şişirici gibi mi?
LayoutInflator
?Android programlamaya ilk başladığımda LayoutInflater
ve ile gerçekten kafam karıştı findViewById
. Bazen birini bazen de diğerini kullandık.
LayoutInflater
xml düzenlerinizden birinden yeni View
(veya Layout
) bir nesne oluşturmak için kullanılır .findViewById
size daha önce oluşturulmuş olan bir görünüme referans verir. Sen henüz görüntüleme oluşturmadığınızı düşünebilir, ama istediğim zaman setContentView
içinde onCreate
, onun subviews birlikte etkinliğin düzen perde arkasında şişirilmiş (oluşturulan) alır.Görünüm zaten varsa, o zaman kullanın findViewById
. Değilse, a ile oluşturun LayoutInflater
.
İşte yaptığım LayoutInflater
ve hem findViewById
eylem halinde olan küçük bir proje . Özel bir kod olmadan, düzen böyle görünür.
Mavi kare, ana düzene eklenmiş özel bir düzendir include
( daha fazla bilgi için buraya bakın ). İçerik görünümünün bir parçası olduğu için otomatik olarak şişirildi. Gördüğünüz gibi, kod hakkında özel bir şey yok.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Şimdi özel düzenimizin başka bir kopyasını şişirelim (oluşturalım) ve ekleyelim.
LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);
Yeni görünüm düzenini şişirmek için yaptığım tek şey, şişiriciye xml dosyamın adını ( my_layout
), eklemek istediğim üst düzeni ( mainLayout
) söylemek ve aslında henüz eklemek istemediğimi söylemekti ( false
) . (Ayrıca üst öğeyi de ayarlayabilirim null
, ancak daha sonra özel düzenimin kök görünümünün düzen parametreleri yok sayılır.)
İşte yine bağlam içinde.
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
Yalnızca bir düzen zaten şişirildikten sonra nasıl kullanıldığına dikkat edin .
Yukarıdaki örnek için 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>
RecyclerView
. ( Liste veya ızgaraRecyclerView
için bu örneklere bakın .) Listedeki veya ızgaradaki görünür her öğe için yeni bir düzen şişirmeniz gerekir.myLayout
bir RelativeLayout olarak şişirmiş olsam da bir Görünüm (bkz. My_layout.xml). Şişirildikten sonra LinearLayout üst öğesinin (yani mainLayout
) alt görünümü olarak ekliyorum .
LayoutInflater.inflate (), bir görünümü tanımlayan bir res / layout / *. Xml dosyasını uygulama kaynak kodunuzda kullanılabilen gerçek bir View nesnesine dönüştürmek için bir yol sağlar.
temel iki adım: inflater olsun ve sonra kaynağı şişirmek
Şişirmeyi nasıl elde edersiniz?
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Xml dosyasının "list_item.xml" olduğunu varsayarak görünümü nasıl elde edersiniz?
View view = inflater.inflate(R.layout.list_item, parent, false);
İşte öncekine benzer, ancak şişirme parametrelerini ve sağlayabileceği dinamik davranışı daha fazla göstermek için genişletilen başka bir örnek.
ListView satır düzeninizde değişken sayıda TextView olabileceğini varsayın. Bu yüzden önce temel öğe Görünümü'nü şişirirsiniz (önceki örnekte olduğu gibi) ve ardından çalışma zamanında TextView'leri dinamik olarak ekleyerek döngü yaparsınız. Android: layout_weight kullanarak ek olarak her şeyi mükemmel şekilde hizalar.
Layouts kaynakları şunlardır:
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 sınıfının uzantısında getView yöntemini geçersiz kılma
@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;
}
Not farklı şişirme yöntem çağrıları:
inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams
Bu sınıf, düzen XML dosyasını karşılık gelen View
nesnelerine başlatmak için kullanılır . Hiçbir zaman doğrudan kullanılmaz - geçerli bağlama bağlanmış ve üzerinde çalıştığınız aygıt için doğru yapılandırılmış standart bir örneği almak için getLayoutInflater()
veya öğesini getSystemService(String)
kullanın LayoutInflater
. Örneğin:
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
Referans: http://developer.android.com/reference/android/view/LayoutInflater.html
Şişirme, bir mizanpajı (veya GUI öğesini) açıklayan XML dosyasını okumak ve ona karşılık gelen gerçek nesneleri oluşturmak ve böylece nesneyi bir Android uygulamasında görünür kılmak anlamına gelir.
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);
Bu dosya date_time_dialog.xml olarak kaydedilebilir :
<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>
Bu dosya date_time_picker.xml olarak kaydedilebilir :
<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
Olarak kaydedilen sınıf 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();
}
});
}
}
Şişirici ne yapar
Bir xml düzenini input (say) olarak alır ve View nesnesine dönüştürür.
Neden gerekli
Özel bir liste görünümü oluşturmamız gereken bir senaryo düşünelim. Şimdi her satır özel olmalıdır. Ama bunu nasıl yapabiliriz. Liste görünümü satırına bir xml düzeni atamak mümkün değildir. Böylece, bir View nesnesi oluşturuyoruz. Böylece içindeki öğelere erişebiliriz (metin görünümü, görüntü görüntüleme vb.) Ve nesneyi liste görünümü satırı olarak atayabiliriz
Bu nedenle, bir yere görünüm türü nesnesini atamamız gerektiğinde ve özel xml tasarımımız olduğunda, onu şişirerek nesneye dönüştürüyoruz ve kullanıyoruz.
LayoutInflater , düzen XML dosyasını Java programlarında kullanılabilen karşılık gelen görünüm nesnelerine somutlaştırmak için kullanılan bir sınıftır. Basit bir ifadeyle, android'de UI oluşturmanın iki yolu vardır. Biri statik, diğeri dinamik veya programlı. Aşağıdaki gibi bir textview
ve bir tanesine sahip basit bir main.xml düzenimiz olduğunu varsayalım 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>
Bu düzeni durağan bir şekilde görüntüleyebiliriz.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bir görünüm oluşturmanın dinamik bir yolu, görünümün main.xml dosyamızda belirtilmediği anlamına gelir, ancak bununla çalışma zamanında göstermek istiyoruz. Örneğin, düzen klasöründe footer.xml olarak başka bir XML var
<?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>
Bu metin kutusunu ana kullanıcı arayüzümüzde çalışma zamanında göstermek istiyoruz. Burada text.xml'yi şişireceğiz. Nasıl olduğunu gör:
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);
Burada bir LayoutInflater örneği almak için getSystemService (String) kullandım. Aşağıdaki gibi getSystemService (String) kullanmak yerine şişirmek için getLayoutInflator () kullanabilirsiniz:
LayoutInflator inflater = getLayoutInflater();
TextView t = (TextView) inflater.inflate(R.layout.footer, null);
lLayout.addView(t);
Aşağıda, bir mizanpajın kök Görünümü için başvuru alma, şişirme ve setContentView (Görünüm görünümü)
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 görünüm açıklamasını okuyan ve bunları java tabanlı View nesnelerine dönüştüren bir sınıftır.
özelleştirme listem umarım konsepti resmediyor
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;
}
}
}
LayoutInflater, XML'de tanımlanan mizanpajlara dayalı olarak Görüntüleme nesneleri oluşturur. Özel Görünümler oluşturma, Parça görünümlerini Etkinlik görünümlerine şişirme, İletişim Kutuları oluşturma veya yalnızca bir düzen dosyası Görünümünü bir Etkinliğe şişirme gibi LayoutInflater'ı kullanmanın birkaç farklı yolu vardır.
Enflasyon sürecinin nasıl işlediğine dair birçok yanlış anlama var. Bu inflate () yöntemi için belgelerin kötü geldiğini düşünüyorum. İnflate () yöntemi hakkında ayrıntılı bilgi edinmek istiyorsanız, buraya bir blog yazısı yazdım:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
Inflater aslında bir çeşit veri, görünüm, örnek, görünür UI temsili dönüştürmek .. ..Bu programlı olarak belki adaptörler, vb içine veri besleme kullanır. daha sonra tanımladığınız bir xml ile tümleştirerek, verilerin kullanıcı arayüzünde nasıl temsil edilmesi gerektiğini söyler