Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Scrollview组件问题_Android_Scrollview - Fatal编程技术网

Android Scrollview组件问题

Android Scrollview组件问题,android,scrollview,Android,Scrollview,我正在andriod中开发一个聊天应用程序。因为我有一个联系人列表,其中有在线和离线用户。我已经把一个标题标签作为文本视图,并添加了文本“Online Users”,下面我放了一个包含在线用户的listview。在下面,我放置了另一个文本视图,文本为“脱机用户”。在下面,我放置了另一个列表视图,用于保存脱机用户。我的要求是,我需要滚动所有四个组件,而不仅仅是在线listview和离线listview 我是否可以将垂直滚动视图作为父视图,并将所有这四个组件放在其中以实现这一点?您可以,但我认为这是

我正在andriod中开发一个聊天应用程序。因为我有一个联系人列表,其中有在线和离线用户。我已经把一个标题标签作为文本视图,并添加了文本“Online Users”,下面我放了一个包含在线用户的listview。在下面,我放置了另一个文本视图,文本为“脱机用户”。在下面,我放置了另一个列表视图,用于保存脱机用户。我的要求是,我需要滚动所有四个组件,而不仅仅是在线listview和离线listview


我是否可以将垂直滚动视图作为父视图,并将所有这四个组件放在其中以实现这一点?

您可以,但我认为这是一个坏主意。甚至谷歌也不建议创建嵌套的可滚动容器。原因很简单——很难说这样的布局应该是什么样子。ListView和ScrollView有自己处理触摸、轨迹球和按键的方法。两者都非常积极地拦截触摸事件并缓存/重用它们的孩子


我建议对扩展组使用ExpandableListView。将您的列表作为组子项放置。这样的容器将重用和缓存视图,允许用一个手势滚动所有内容,通常工作起来更加直观。我想使用简单的ListView和3种视图类型也可以做到这一点。

不,不要这样做。如果这样做,则listview无法按预期工作。而是对第一个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>
现在将页眉和页脚附加到此视图

// 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);

您正在查找的功能是ListView的viewTypes

从getViewTypeCount()返回不同视图的数量,从getViewType()返回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;
    }
}
private static final int TYPE_TITLE=0;
私有静态最终int类型_ONLINE=1;
私有静态最终整型_OFFLINE=2;
public int getViewTypeCount(){
返回3;
}
public int getViewType(){
如果(i==0 | | i==onlineUsers.size()+1){
返回类型\标题;
}else if(i
如何添加页眉和页脚?你能解释一下吗?我已经编辑了上面的答案。希望它对你有用。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。我不会同意。作者正在询问将列表视图放在滚动视图中的想法,我声称这是个坏主意。谷歌不推荐嵌套可滚动的容器,原因很简单——没有简单的方法来判断这样的布局应该是什么样子。我不是想侮辱任何人,我也不需要任何澄清。我将编辑我的答案以使其更具信息性。@Zielony我如何才能将listview添加为可扩展listview的子级。您能举例说明吗?ExpandableListGroup的适配器可以返回两种类型的行。其中一个是组头,第二个是组子。我假设您已经为两个列表(在线和离线)提供了简单的适配器。现在,您必须实现ExpadableListView(ELV)适配器,它接受两个列表的数据,并返回简单列表行作为ELV的子行。不要将ListView作为子行添加,而是合并适配器并将ListView行作为子行返回。见:
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);
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;
    }
}