Како шо напишав во предходниот пост, адаптерите се скоро најважните компоненти на листите. Тие се одговорни за како еден член во листата ке биди прикажан , кој евенти ке бидат сетирани на истиот и мн мн други работи (по колку сум досаден).
Во предходниот пример за листи искористив SimpleAdapter, кој користи листа од стрингови како влезен параметар и layout (android.R.layout.simple_list_item_1) кој е дефиниран во самиот андроид ОС/SDK.
Мало објаснување – layout-от е изгледот на еден член од листата.
Во примерите кој ке ги разработвам во овај ,и следниот, пост ке користам custom адаптери со екстензи од ArrayAdapter и ResourceCursorAdapter. Ке биди листа шо ке прикажва коли, марка модел и кубикажа.
Пример со ArrayAdapter.
Прво дефинирање на изгледот на еден член во низата (во xml за кодот да остани чист).
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent" android:id="@+id/brand"
android:layout_height="wrap_content" android:textColor="#FFFFFF" android:textSize="18sp"/>
<TextView android:layout_width="fill_parent" android:id="@+id/model" android:textSize="16sp"
android:layout_height="wrap_content" />
<TextView android:layout_width="fill_parent" android:id="@+id/cc" android:textSize="12sp"
android:layout_height="wrap_content" />
</LinearLayout>
Дефинирани се 3 TextView со различни големини на текст и со Ida. Има и класа Car.
public class Car {
private String brand;
private String model;
private String cc;
//setter getteri I konstuktori
}
Следно е да ја истанцираме во Activity-то кај шо ке се користи.
ListView lv = (ListView) findViewById(R.id.mylist);
List cars = getCarList();
Првиот ред е креирање на лист објект кој ке се користи попосле, и листа со коли . Следно шо треба е адаптерот за ListView-то. Обична класа кој наследува од ArrayAdapter. Обавезен е конструкторот во кој се задават параметирте : Context од Activity, ид на layout-от и листата со објекти. Исто се преимплеметира getView методот за да врака то нас шо ни треба.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Car car = carList.get(position);
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(layoutId, parent, false);
}
TextView brand = (TextView) convertView.findViewById(R.id.brand);
TextView model = (TextView) convertView.findViewById(R.id.model);
TextView cc = (TextView) convertView.findViewById(R.id.cc);
brand.setText(car.getBrand());
model.setText("Model : "+car.getModel());
cc.setText("Engine : "+car.getCc()+" cc");
return convertView;
}
Со position се зема соодветниот член од листата со кој ке се пополнуваат полинњата/елементите од layout-от. Мала оптимизација е направена со то шо при секој повик се проверва дали convertView е null и ако е се инфлејтува од XML-от (inflate е скапа операција па тука штедиме), ако го гледавте видеото за тоа како работи ListView и како рециклира компоненти ке ви биди јасно зошто го провервам дали е null После само креираме објект од оваа класа и му го доделваме на ListView-то
JanixCustomAdapter janixAdapter = new JanixCustomAdapter(getApplicationContext(), R.layout.cars_custom_list_item, cars); lv.setAdapter(janixAdapter);
start the engine и имате кастамизиран ListView.
Следува ResourceCursorAdapter…
Android SDK : 1.6
П.С. source code за примерот ке има во следниот пост