ListView自動滑動到頂部(底部)的方法總結

1、一個屬性

ListView有一個屬性叫做stackFromBottom,你可以在xml文件中定義該屬性,就像這樣子:

android:stackFromBottom="true|false"

ListView默認該屬性是false。該屬性的含義是列表是否從ListView的最底部開始展示,若爲true,則從最底部展示,否則從最頂部開始展示。看一下下面的效果就知道是什麼意思了。

假設我們定義了一個main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listview"
        android:stackFromBottom="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ListView>
</RelativeLayout>

其對應的MainActivity.Java文件如下:

package com.example.willenhuang.helloworld;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ListView listView = (ListView) findViewById(R.id.listview);
        listView.setStackFromBottom(false);
        List<String> dataList = new ArrayList<String>();
        for (int i = 0; i < 20; i++) {
            dataList.add("test" + i);
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dataList);
        listView.setAdapter(adapter);
    }
}

當我們將Android:stackFromBottom設置爲true時,得到的效果如下圖:

我們可以看到列表的排列順序並沒有變化,但是卻是從底部開始向上展示。當然當我們去掉該屬性後,就可以見到正常的效果,如下圖所示,這和我們平常的ListView就是一樣的了。

2、如何滑動到頂部

使用下面的代碼可以將你的ListView滑動到頂部:

if (!YourListView.isStackFromBottom()) {
    YourListView.setStackFromBottom(true);
}
 YourListView.setStackFromBottom(false);

說明:從上面的分析和效果圖可以知道,stackFromBottom的屬性如果爲true,則表示列表從最下面開始顯示要展示的內容。如果爲false,則表示列表從最下面開始顯示要展示的內容。這裏要特別說明一下,如果你認爲最終都要執行YourListView.setStackFromBottom(false);這一語句,那麼YourListView.setStackFromBottom(true);就沒有啥意義了。其實並不是這樣的,當我們將YourListView.setStackFromBottom(true);該語句去掉的時候,會發現並沒有任何效果,列表並沒有滑動到頂部。所以我這裏猜測是不是這樣的原因:本來列表的屬性是setStackFromBottom(false),然後你繼續執行YourListView.setStackFromBottom(false);應該是沒有任何效果的。必須要將列表的屬性先改變,然後再改回來纔會達到滑動到頂部的效果。所以必須要執行YourListView.setStackFromBottom(true);這一語句。

3、如何滑動到底部

if (YourListView.isStackFromBottom()) {
    YourListView.setStackFromBottom(false);
}
 YourListView.setStackFromBottom(true);

道理和滑動到頂部是一樣的,這裏就不再講一遍了。

4、總結

相比於其他方式進行ListView的自動滑動到頂部(底部),使用setStackFromStack還是挺好用的。但是使用過程中有不理解的可以自己寫一個demo出來比對比對。這樣就更能加深對新知識的理解了。

發佈了44 篇原創文章 · 獲贊 87 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章