最初の衝動は、タイトルが言うことをすることでした: ScrollViewの中にListViewを置きます。 結果として得られたものが正しく表示されなかったため、Googleをより深く掘り下げました。
ネットワーク上の多くの場所(例: https : //groups.google.com/forum/#!topic / android-beginners / LRpLgGOy2Pcまたはここ: http : //stackoverflow.com/questions/1526831/android-scrollview- layout-problem )は、これができないことを直接述べています。 このようなことを実装するために、 ListViewには通常のヘッダーがあります。
ヘッダーを追加するには、 ListViewクラスのメソッドを呼び出します。
public void addHeaderView (View v)
View vは任意の方法で作成できます(明示的にコンストラクターを呼び出すか、インフレータを使用して)。
View hv = ...;
listView.addHeaderView(hv);
ListViewタイトルには複数のタイトルを含めることができます。 ちなみに、その量に関連するもう1つの特性があります。デフォルトでは、ヘッダーも通常のリストアイテムと同様にクリック可能です。ヘッダーをクリックすると、 setOnItemClickListenerおよびsetOnItemLongClickListenerの呼び出しで指定されたライナーが機能するため、クリックされた要素の位置は位置パラメーターのライナーに渡されます。ヘッダーの数だけシフトされます。 この事実は、処理中にライナーで考慮する必要があります。 これを行うために、 ListViewには次のメソッドがあります。
int getHeaderViewsCount()
リストヘッダーの数を返します。 たとえば、返される値によって、内部データリストに配置する前に、lisnerで取得した位置の値を減らすことができます。
protected OnItemClickListener itemClickListener = new OnItemClickListener() {
public void onItemClick(final AdapterView<?> l, final View v, final int position, final long id) {
MyItem myItem = myItems.get(position - listView.getHeaderViewsCount());
// do something to myItem
}
};
ヘッダーを追加するには、もう少し複雑な別の方法があります。
public void addHeaderView (View v, Object data, boolean isSelectable)
これは、見出しをクリック不可にする機能を提供します。3番目のパラメーターにfalseを渡すと、見出しをクリックすると、リストは機能しませんonItemClickListener 。 このようなヘッダー内にあるビューに設定されたリスナーは、正常に機能します。 ただし、この場合でも、タイトルはクリックできないにもかかわらず、 位置の要素の番号付けでは、要素の存在が考慮されます。
View hv = ...;
listView.addHeaderView(hv, null, false);
完全を期すために、2番目のパラメーター( Object data )の意味はドキュメントからあまり明確ではありませんが、 Adapter.getItem()メソッドによって返されるデータを実際に設定すると言います( http://stackoverflow.com/questions/ 4311693 / add-headerview-in-the-class-listview-doで2番目のパラメーターを実行します )。
リストには、フッター用の同様のメソッドセットもあります。
void addFooterView(View v)
void addFooterView(View v, Object data, boolean isSelectable)
int getFooterViewsCount()