2011-10-21

捲動 ListView 到指定的位置

如何使用 ListView 請參考 在 Android 裡使用 ListActivity, ListView, ListAdpater

先建立 Activity:
public class GoToListActivity extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview);
        this.setListAdapter(this.createArrayAdapter());
        ListView lv = (ListView) this.findViewById(android.R.id.list);
        // 指定的 item 緊貼的上緣,如下圖一
        lv.setSelection(5);
        // 上方多出指定的空間,如下圖二
        lv.setSelectionFromTop(5, 20);
    }

    private ArrayAdapter<String> createArrayAdapter() {
        List<String> list = new ArrayList<String>();
        for (int i = 1; i <= 29; i++) {
            list.add("第 " + i + " 關");
        }
        return new ArrayAdapter<String>(this, R.layout.list_item,
                list.toArray(new String[] {}));
    }
}
關鍵在於 ListView.setSelection(...) 或者 ListView.setSelectionFromTop(...)。

主要 layout 設定檔 listview.xml 如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ListView
        android:id="@android:id/list"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        />
    <TextView
        android:id="@android:id/empty"  
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/empty"
        />
</LinearLayout>
最後再加上 ListView 的元件 UI 設定檔 list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="20px"
    />
結果如下:

沒有留言:

張貼留言