2014年4月2日

Android 簡單把玩ListView - scroll到指定的位置

Android 簡單把玩ListView - scroll到指定的位置
在activity_main.xml加入listView元件
< ListView
    android:id= "@+id/listView"
    android:layout_width= "match_parent"
    android:layout_height= "match_parent"
/>
MainActivity.java 加入一段code
public class MainActivity extends Activity {

  // private List<String> listData;
  private ListView listView;
       private String[] data;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout. activity_main);
        listView = (ListView) findViewById(R.id. listView);
       initData();
        listView.setSelection(4);
 }

  private void initData() {

       data = new String[] { "基隆市" , "台北市" , "新北市" , "桃園縣" , "新竹縣" ,
                  "苗栗縣" , "台中市" , "彰化縣" , "南投縣" , "雲林縣" , "嘉義縣" , "台南市" , "高雄市" , "屏東縣" ,
                  "宜蘭縣" , "花蓮縣" , "台東縣" , "澎湖縣" };
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this ,
                 android.R.layout. simple_expandable_list_item_1 , data);
        listView.setAdapter(adapter);
 }

}
以執行結果來說,一開始會顯示基隆市、台北市...依序由上往下排,要看到下面的資料,就要往上scroll。 當然我們也可以一開始就讓ListView的資料示在最後一筆。 只要在ListView加入屬性android:stackFromBottom = "true"
< ListView
    android:id= "@+id/listView"
    android:layout_width= "match_parent"
    android:layout_height= "match_parent"
    android:stackFromBottom = "true"
/>
這樣設定的好處是當有新資料加入時,則會自動移到最底一行。
顯示方式不只如此,如果我們要一開始指定從新竹市開始以下,以index來說新竹市的位置是4. 我們可以在initData();之後指定listView scroll的位置。
listView.setSelection(4);
也就是說,如果android:stackFromBottom設定為flase,但又要將listView顯示最後一筆的位置。 就可以用這個來代替
listView.setSelection( data.length - 1);
我們也可以判斷listview是否已經移到最底,只要我們把listview設定scrollListener就可以囉。
listView .setOnScrollListener( new OnScrollListener() {

     @Override
     public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

          if (firstVisibleItem + visibleItemCount == totalItemCount) {
                //最底
                isScrollFoot = true;
         } else {
                isScrollFoot = false;
         }
    }

     @Override
     public void onScrollStateChanged(AbsListView view, int scrollState) {
          if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && isScrollFoot ) { // 滾動靜止且滾動到最底部
                //停在最底部
               Toast. makeText(MainActivity. this, "最後一筆囉!", Toast. LENGTH_SHORT).show();
         } else {
                // 不是停在最底部
         }
    }
});
這一行是判斷是否在最後一筆。
if (firstVisibleItem + visibleItemCount == totalItemCount) 
判斷是否為靜止狀態
if(scrollState == OnScrollListener.SCROLL_STATE_IDLE) 
以上了解ListView scroll的基本用法後,listView的滾動應用就更方便、多元了。