1.先創一個新專案。
2.將ListView加入,並作調整
(好像壓到上面的文字了,加個分隔線好了)
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.zyo.listviewsample.MainActivity" >
<!-- 文字欄位 -->
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<!-- 分隔線 (1dp) 背景黑色 -->
<LinearLayout
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/textView1"
android:background="#000000"
android:orientation="vertical" >
</LinearLayout>
<!-- ListView below(貼齊XXX之下) -->
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/layout1" >
</ListView>
</RelativeLayout>
3. 好了,那麼來設定畫面內容了。
Android的ListView有個特色,要呈現內容,必須裝入一個叫做Adapter的Class。
而目前就我知道的Adapter繼承,有兩種,一種是ArrayAdapter,另一種是BaseAapter,
建議是用BaseAdapter,因為在做ViewHother時,ArrayAdapter會有很多狀況...,或許是
我還不大會用吧。
4.創建一個新的package跟class專門放adapter
這邊記得選擇BaseAdapter
最後呈現如下
5.創建Adapter的Object,拿來裝每一條的資料
6.最後是每一條的畫面內容,創建一個Layout當作每一條的畫面。
Layout內容 (記得命名TextView的ID)
<?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="match_parent">
<TextView
android:id="@+id/list_row_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name:" />
<TextView
android:id="@+id/list_row_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Title:" />
<TextView
android:id="@+id/list_row_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Date:" />
</LinearLayout>
7.好了,畫面跟物件都準備好了,接下來下Java了。先點開MainActivity,輸入以下內容。
package com.zyo.listviewsample;
import java.util.ArrayList;
import com.zyo.adapters.listAdapter;
import com.zyo.adapters.listItem;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
public class MainActivity extends Activity {
/**ListView*/
private ListView mlistView;
/**ListView的Adapter組件*/
private listAdapter mlistAdapter;
/**儲存ListView每一條的資料陣列*/
private ArrayList<listItem> mlistAry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//設定ListView
mlistView = (ListView) findViewById(R.id.listView1);
//創一下資料
mlistAry = new ArrayList<listItem>();
for(int i = 0 ; i <30;i++){
listItem item = new listItem();
item.NAME = "User_"+i;
item.TITLE = "Massage_"+i;
item.DATE = "2014/11/"+(i+1);
mlistAry.add(item);
}
//把資料帶入Adapter
mlistAdapter = new listAdapter(this,mlistAry);
//把Adapter丟到ListView內
mlistView.setAdapter(mlistAdapter);
}
}
8.這時應該會有幾個錯誤,是因為我們的Item跟Adapter內容還未對應到。
9.先新增Item屬性,有Title、name、date。
package com.zyo.adapters;
public class listItem {
public String NAME,TITLE,DATE;
}
10.再修正listAdapter
package com.zyo.adapters;
import java.util.ArrayList;
import com.zyo.listviewsample.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class listAdapter extends BaseAdapter {
private ArrayList mlistAry;
private Context mcontext;
/**
* 創建時,帶參數
* @param context
* @param list
*/
public listAdapter(Context context,ArrayList list){
mlistAry = list;
mcontext = context;
}
@Override
public int getCount() {
/*這邊要注意,設定你要呈現的筆數*/
return mlistAry.size();
}
@Override
public Object getItem(int position) {
/*回傳ITEM*/
return mlistAry.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*設定畫面來源*/
convertView = LayoutInflater.from(mcontext).inflate(R.layout.list_row, null);
TextView nametxt =(TextView) convertView.findViewById(R.id.list_row_name);
TextView titletxt =(TextView) convertView.findViewById(R.id.list_row_title);
TextView datetxt =(TextView) convertView.findViewById(R.id.list_row_date);
/*附值*/
listItem item = mlistAry.get(position);
nametxt.setText(item.NAME);
titletxt.setText(item.TITLE);
datetxt.setText(item.DATE);
return convertView;
}
}
11.現在應該就沒有錯誤了,那就來看看成果吧,發布到手機上。



















沒有留言:
張貼留言