我想首先说列表视图工作正常,此代码没有问题。
我想知道的是我如何扩展它。我希望在适配器的所有项目出现之前,在列表视图的顶部有一个标签(一些文本来描述列表视图中的项目代表什么)。但很明显,因为我希望在里面的列表视图中,当用户开始滚动列表时,我希望标签不在视野范围内。
我如何实现这一目标?
ListView listView = (ListView) findViewById(R.id.list_task_summary);
TasksSummaryListViewHelper adapter = new TasksSummaryListViewHelper(this, getTasks());
listView.setAdapter(adapter);
listView.setEmptyView(findViewById(R.id.text_empty_list));
我的模板:
<ListView
android:layout_marginRight="5dp"
android:layout_marginLeft="5dp"
android:id="@+id/list_task_summary"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@android:color/transparent"
android:dividerHeight="15sp"
android:listSelector="@drawable/list_task_summary_selector_unselected">
</ListView>
答案 0 :(得分:1)
在自定义列表Adapter
中,当调用getView
时,为位置0和您拥有列表项目布局的其他位置创建标题视图
@Override
public View getView(int position, View contentView , ViewGroup parent){
View row = null;
if(position == 0) {
// inflate any custom layout or just a textView
TextView titleView = new TextView();
titleView.setText("TITLE");
row = titleView;
}
else {
row = mContext.getLayoutInflater().inflate(R.layout.list_item, null);
}
return row;
}
并且,您将看到ListView
的recyle问题,因为它对其他项使用相同的子视图,
因此,您需要Override
getViewTypeCount
并将视图类型计数返回为2
@Override
public int getViewTypeCount() {
return 2;
}
此外,Override
getItemViewType
并返回位置0和其他视图相同ID的唯一ID。
@Override
public int getItemViewType(int position){
// return a unique number
if(position == 0){
return 0;
}
else {
return 1;
}
}
答案 1 :(得分:1)
你可以按照Libin的建议去做,但是如果它是一个需要与列表的其余部分一起滚动的静态视图,我认为最好使用listView.addHeaderView()
。这样您根本不需要对适配器进行任何更改。请注意,任何OnListItemClickListeners中报告的位置都将被标题视图的数量所抵消。