Android adapter getView

因為這getView被問上不少次,其實這東西就像是iOS UITableViewDelegate內的"cellForRowAtIndexPath",只是在android上不僅可以使用於listView也可以使用在gridView,簡單一句話就是"他很好用"。

不過小弟我根本不會寫程式,如果有寫錯的部份就別給我面子捅下去就對了(簡單一個字就是懶...)

以下為自訂row在getView
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row;
//直接去抓xml的方式來定義內容
row=inflater.inflate(R.layout.custom_row, parent, false);

TextView title=(TextView)row.findViewById(R.id.title);
TextView subtitle=(TextView)row.findViewById(R.id.subtitle);
ImageView myImage = (ImageView)row.findViewById(R.id.myImage);

return (row);
}


以下為row的xml內容,基本上就是看你高興...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="left"
>

<ImageView
android:id="@+id/myImage"
android:src="@drawable/my"
android:layout_width="100px"
android:layout_height="100px"
</ImageView>

<LinearLayout
android:gravity="left"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="100px">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textSize="8pt"
android:singleLine="true">
</TextView>
<TextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Subtitle"
android:textSize="6pt"
android:singleLine="true">
</TextView>
</LinearLayout>
</LinearLayout>


基本上到了這邊應該還會有個疑問是那每一個row要怎樣來把資料丟進去?我個人都是建一個class丟進array內來做管理,對我這種腦內記憶力不足的人來說還蠻好用的。
public class MyObj{
private String title;
private String subtitle;
private Drawable imageDrawable;
}


對應到row裡面可以使用下面這方法,其中的"myArray"也請記得先宣告出來
MyObj myObj = (MyObj)myArray.get(position);

相關連結
Android Developer
Android Developer - adapter
Android Developer - listview

1 則留言: