我正在andriod开发一个聊天应用程序。我有一个联系人列表,我有在线和离线用户。我已将标题标签添加为textView并添加了文本'在线用户'在下面我已经放了一个列表视图,其中包含在线用户。在下面我添加了另一个带有文本'脱机用户'的文本视图。下面我已经放置了另一个包含脱机用户的列表视图。我的要求是,我需要将所有四个作为一个组件滚动,而不是单独在线列表视图和离线列表视图。
我可以将垂直滚动视图作为父级,将所有这四个组件放在其中以实现此目的吗?
答案 0 :(得分:1)
你可以,但我认为这是一个坏主意。甚至谷歌也不建议创建嵌套的可滚动容器。原因很简单 - 很难说这种布局应该如何表现。 ListViews和ScrollViews有自己的方式来处理触摸,轨迹球和键。两者都非常积极地拦截触摸事件并缓存/重用他们的孩子。
我建议将ExpandableListView与扩展组一起使用。将您的列表作为组子项放置。这样的容器将重用和缓存视图,允许用一个手势滚动所有内容,并且通常将更直观地工作。我想使用简单的ListView和3种视图类型也可以做到这一点。
答案 1 :(得分:1)
您正在寻找的功能是ListView的viewTypes。
从getViewType()返回getViewTypeCount()和0..n-1中不同视图的数量,告诉ListView适配器中有许多不同类型的视图。
private static final int TYPE_TITLE = 0;
private static final int TYPE_ONLINE = 1;
private static final int TYPE_OFFLINE = 2;
public int getViewTypeCount(){
return 3;
}
public int getViewType(){
if(i == 0 || i == onlineUsers.size() + 1){
return TYPE_TITLE;
}else if (i < onlineUsers.size() + 1){
return TYPE_ONLINE;
}else{
return TYPE_OFFLINE;
}
}
答案 2 :(得分:0)
不要那样做。如果您这样做,那么listview无法按需运行。而是使用页眉和页脚功能作为第一个列表视图。现在,您可以在不使用滚动视图的情况下滚动整个视图。
编辑:
这是一个粗略的示例,表明如何将页眉和页脚放在您的案例中。
你可以为页眉和页脚分隔单独的xml文件,
header.xml
<LinearLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:background="#AAFFDD" >
<Textview...>
</LinearLayout>
footer.xml
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:background="#AAFFDD" >
<Textview.../>
<Listview
android:id="@+id/listview2 ../>
</LinearLayout>
你的第一个Listview将是这样的单独布局,即主要布局,
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical" >
<Listview
android:id="@+id/listview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.97"
android:background="@color/main_gray"
android:gravity="center"
android:horizontalSpacing="10dp"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" >
</ListView>
</LinearLayout>
在java代码中初始化gridview as,
Listview listview = (ListView) findViewById(R.id.listview1);
现在将页眉和页脚附加到此视图
// Attaches footer to ListView
LayoutInflater inflater = this.getLayoutInflater();
View headerView = inflater.inflate(R.layout.header, null);
gridview.addHeaderView(headerView);
// Attaches footer to ListView
LinearLayout footerView = (LinearLayout) inflater.inflate(
R.layout.footer, null);
gridview.addFooterView(footerView);