Odpowiedzi:
Kiedy używasz niestandardowego widoku w ListView
, musisz zdefiniować układ wiersza. Tworzysz plik XML, w którym umieszczasz widżety Androida, a następnie w kodzie adaptera musisz zrobić coś takiego:
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;
}
Przeczytaj więcej w oficjalnej dokumentacji .
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
jest a , chociaż wyjaśnia, gdzie jej użyć. Odpowiedź 1-dół jest lepsza.
The LayoutInflater klasa służy do wystąpienia zawartości plików XML układ do ich odpowiednich Zobacz obiektów.
Innymi słowy, pobiera plik XML jako dane wejściowe i buduje z niego obiekty View.
single_list_item.xml
plik dla każdej linii ListView
. Czy użycie tego pliku XML jest jak inflator?
LayoutInflator
zrobić?Kiedy zaczynałem programować na Androida, byłem naprawdę zdezorientowany przez LayoutInflater
i findViewById
. Czasami używaliśmy jednego, a czasem drugiego.
LayoutInflater
służy do tworzenia nowego View
(lub Layout
) obiektu z jednego z układów xml.findViewById
po prostu daje odniesienie do widoku, który został już utworzony. Można by pomyśleć, że nie utworzono jeszcze żadnych poglądów, ale gdy nazywasz setContentView
się onCreate
, układ aktywności użytkownika wraz z jego subviews zostanie nadmuchany (stworzony) za kulisami.Więc jeśli widok już istnieje, użyj findViewById
. Jeśli nie, utwórz go za pomocąLayoutInflater
.
Oto mój mały projekt, który pokazuje zarówno w akcji, jak LayoutInflater
i findViewById
w akcji. Bez specjalnego kodu układ wygląda następująco.
Niebieski kwadrat to niestandardowy układ wstawiony do głównego układu za pomocą include
(patrz tutaj, aby uzyskać więcej). Został on zawyżony automatycznie, ponieważ jest częścią widoku zawartości. Jak widać, w kodzie nie ma nic specjalnego.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Teraz napompujmy (utwórz) kolejną kopię naszego niestandardowego układu i dodaj go.
LayoutInflater inflater = getLayoutInflater();
View myLayout = inflater.inflate(R.layout.my_layout, mainLayout, false);
Aby napompować nowy układ widoku, wszystko, co zrobiłem, to powiedzieć inflatorowi nazwę mojego pliku xml ( my_layout
), układ nadrzędny, do którego chcę go dodać ( mainLayout
), i że tak naprawdę nie chcę go jeszcze dodawać ( false
) . (Mógłbym również ustawić element nadrzędny na null
, ale wówczas parametry układu widoku głównego mojego niestandardowego układu zostaną zignorowane).
Tutaj znów jest w kontekście.
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);
}
}
Zauważ, że findViewById
jest używany tylko po zawyżeniu układu.
Oto xml dla powyższego przykładu.
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
. (Zobacz te RecyclerView
przykłady, aby uzyskać listę lub siatkę .) Musisz nadmuchać nowy układ dla każdego widocznego elementu na liście lub siatce.myLayout
to widok, chociaż mogłem go zawyżać jako RelativeLayout (patrz my_layout.xml). Po nadmuchaniu dodaję go jako widok podrzędny elementu nadrzędnego LinearLayout (to znaczy mainLayout
).
LayoutInflater.inflate () zapewnia sposób na konwersję pliku res / layout / *. Xml definiującego widok na rzeczywisty obiekt View możliwy do użycia w kodzie źródłowym aplikacji.
podstawowe dwa kroki: zdobądź inflator, a następnie napompuj zasób
Jak zdobyć inflator?
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Jak uzyskać widok przy założeniu, że plik xml to „list_item.xml”?
View view = inflater.inflate(R.layout.list_item, parent, false);
Oto kolejny przykład podobny do poprzedniego, ale rozszerzony w celu dalszego wykazania parametrów nadmuchiwania i zachowania dynamicznego, które może zapewnić.
Załóżmy, że układ wiersza ListView może mieć zmienną liczbę TextView. Najpierw napompujesz element podstawowy Widok (tak jak w poprzednim przykładzie), a następnie zapętlisz dynamicznie dodając TextViews w czasie wykonywania. Korzystanie z Androida: layout_weight dodatkowo wszystko idealnie wyrównuje.
Oto zasoby Layouts:
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"/>
Przesłoń metodę getView w rozszerzeniu klasy BaseAdapter
@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;
}
Zwróć uwagę na różne wywołania metody inflacji:
inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams
Ta klasa służy do tworzenia pliku XML układu w odpowiadających mu View
obiektach. Nigdy nie można go używać bezpośrednio - użyj getLayoutInflater()
lub getSystemService(String)
pobierz standardową LayoutInflater
instancję, która jest już podłączona do bieżącego kontekstu i poprawnie skonfigurowana dla urządzenia, na którym pracujesz. Na przykład:
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
Odniesienie: http://developer.android.com/reference/android/view/LayoutInflater.html
Napompowanie oznacza odczytanie pliku XML opisującego układ (lub element GUI) i utworzenie rzeczywistych obiektów, które mu odpowiadają, a tym samym uczynienie obiektu widocznym w aplikacji na Androida.
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);
Ten plik można zapisać jako 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>
Ten plik można zapisać jako 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
Klasa zapisany jako 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();
}
});
}
}
Co robi inflator
Pobiera układ xml jako dane wejściowe (powiedzmy) i konwertuje go na obiekt View.
Dlaczego potrzebny
Pomyślmy o scenariuszu, w którym musimy stworzyć niestandardowy widok listy. Teraz każdy wiersz powinien być niestandardowy. Ale jak możemy to zrobić. Nie można przypisać układu xml do wiersza widoku listy. Tworzymy obiekt View. W ten sposób możemy uzyskać dostęp do elementów w nim zawartych (widok tekstu, widok obrazu itp.), A także przypisać obiekt jako wiersz widoku listy
Tak więc, ilekroć musimy gdzieś przypisać obiekt typu widoku i mamy nasz niestandardowy projekt xml, po prostu przekształcamy go w obiekt przez inflator i używamy go.
LayoutInflater to klasa używana do tworzenia instancji pliku XML układu w odpowiadających mu obiektach widoku, które mogą być używane w programach Java. Mówiąc prościej, istnieją dwa sposoby tworzenia interfejsu użytkownika w Androidzie. Jeden jest statyczny, a drugi dynamiczny lub programowo. Załóżmy, że mamy prosty układ main.xml mający jeden textview
i jeden edittext
w następujący sposób.
<?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>
Możemy wyświetlić ten układ w sposób statyczny
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Dynamiczny sposób tworzenia widoku oznacza, że widok nie jest wspomniany w naszym pliku main.xml, ale chcemy to pokazać w czasie wykonywania. Na przykład mamy inny plik XML w folderze układu jako footer.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>
Chcemy pokazać to pole tekstowe w czasie wykonywania w naszym głównym interfejsie użytkownika. Więc tutaj napompujemy text.xml. Zobacz jak:
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);
Tutaj użyłem getSystemService (String), aby pobrać instancję LayoutInflater. Mogę również użyć metody getLayoutInflator (), aby napompować, zamiast metody getSystemService (String), jak poniżej:
LayoutInflator inflater = getLayoutInflater();
TextView t = (TextView) inflater.inflate(R.layout.footer, null);
lLayout.addView(t);
oto przykład uzyskiwania odwołania do widoku głównego układu, nadmuchiwania go i używania go z setContentView (widok widoku)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater li=getLayoutInflater();
View rootView=li.inflate(R.layout.activity_main,null);
setContentView(rootView);
}
Layout inflater to klasa, która odczytuje opis wyglądu xml i przekształca je w obiekty widoku oparte na Javie.
moja lista dostosowań ma nadzieję, że ilustruje koncepcję
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 tworzy obiekty View na podstawie układów zdefiniowanych w XML. Istnieje kilka różnych sposobów korzystania z LayoutInflater, w tym tworzenie niestandardowych widoków, nadmuchiwanie widoków fragmentów do widoków działań, tworzenie okien dialogowych lub po prostu nadmuchiwanie pliku układu widok do działania.
Istnieje wiele nieporozumień na temat tego, jak działa proces inflacji. Myślę, że wynika to z braku dokumentacji dla metody inflate (). Jeśli chcesz dowiedzieć się więcej o metodzie inflate (), napisałem o tym post na blogu:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
Inflater w rzeczywistości konwertuje dane, widoki, instancje, na widoczną reprezentację interfejsu użytkownika .. .. wykorzystuje programowo przesył danych do być może adapterów itp. następnie integrując go ze zdefiniowanym plikiem XML, który mówi, jak dane powinny być reprezentowane w interfejsie użytkownika