Scrollview组件问题

时间:2014-04-25 11:33:52

标签: android scrollview

我正在andriod开发一个聊天应用程序。我有一个联系人列表,我有在线和离线用户。我已将标题标签添加为textView并添加了文本'在线用户'在下面我已经放了一个列表视图,其中包含在线用户。在下面我添加了另一个带有文本'脱机用户'的文本视图。下面我已经放置了另一个包含脱机用户的列表视图。我的要求是,我需要将所有四个作为一个组件滚动,而不是单独在线列表视图和离线列表视图。

我可以将垂直滚动视图作为父级,将所有这四个组件放在其中以实现此目的吗?

3 个答案:

答案 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);