在Day24的應用中,我們建立的ArrayAdapter
所使用的Layout,是Android預定義的android.R.layout.simple_list_item_1,Android framework中提供了很多Layout,官方文件R.layout給出了列表。
當然,我們也可以定義一個自己的Layout來配合ArrayAdapter
,在Android Studio中,在左側目錄建立一個新的XML(res/layout > New > Layout resource file),取名為list_item.xml。
在此list_item中,建立我們的Layout配置如下:
xmlns:tools="http://schemas.android.com/tools"
tools:text
屬性
tools:text
屬於Design-time view attributes,意即我們只會在設計階段(在Android Studio Preview)時看到這些文字。<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tortoises_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="Cyclemys trifasciata"/>
<TextView
android:id="@+id/default_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="金錢龜"/>
</LinearLayout>
回到MainActivity.java中,查看Day24中建立的ArrayAdapter,將resource換成自定義Layout(list_item.xnl):
//ArrayAdapter<String> itemsAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, tortoises);
ArrayAdapter<String> itemsAdapter = new ArrayAdapter(this, R.layout.tortoises_text_view, list_item);
ListView listView = findViewById(R.id.list);
listView.setAdapter(itemsAdapter);
除了已建立的ArrayList
tortoises外,若還想要傳入另一個ArrayList
給ArrayAdapter,作為tortoises內容的中文對照呢?
來看看ArrayAdapter的建構式為:ArrayAdapter(Context context, int resource, List<T> objects)
顯然ArrayAdapter無法同時接受兩個String ArrayList,但我們可以定義自己的class,並實作object傳入。
在Android Studio右側新建一個java(路徑:java > New > Java Class),命名為NameMapping:
public class NameMapping {
//烏龜的學名
private String mTortoisesSciName;
//烏龜的中文
private String mTortoisesTwName;
//建構式
public NameMapping(String tortoisesSciName, String tortoisesTwName){
mTortoisesSciName = tortoisesSciName;
mTortoisesTwName = tortoisesTwName;
}
//方法1.傳回學名
public String getTortoisesSciName(){
return mTortoisesSciName;
}
//方法2.傳回中文名
public String gettortoisesTwName(){
return mTortoisesTwName;
}
}
明天將繼續使用NameMapping class完成此項練習。