Java Android:使用不同的适配器合并两种类型的列表,列表在UI中合并

Java Android:使用不同的适配器合并两种类型的列表,列表在UI中合并,java,android,list,Java,Android,List,我正在从事一个Android项目,在这个项目中,我有两种不同类型的聊天机会。一个用于组,另一个用于私人或一对一通信。现在,登录用户可以与之聊天的所有组和用户显示在ConversationActivity中 为此,我在UI中准备了两个列表,内容将通过异步方法添加到每个列表中。每个列表都有一个单独的适配器,我可以使用它轻松识别单击了哪个项目 这个机制工作得很好,只是当活动打开时,列表看起来是层叠在一起的,显然这不是目的。所以我在相对论中指出,将它置于另一个之上,这也没有帮助 如何在一个活动页面中显示

我正在从事一个Android项目,在这个项目中,我有两种不同类型的聊天机会。一个用于
,另一个用于
私人
或一对一通信。现在,登录用户可以与之聊天的所有组和用户显示在
ConversationActivity

为此,我在UI中准备了两个列表,内容将通过异步方法添加到每个列表中。每个列表都有一个单独的适配器,我可以使用它轻松识别单击了哪个项目

这个机制工作得很好,只是当活动打开时,列表看起来是层叠在一起的,显然这不是目的。所以我在相对论中指出,将它置于另一个之上,这也没有帮助

如何在一个活动页面中显示两个具有两个不同适配器的列表?

activity_conversations.xml:

<?xml version="1.0" encoding="UTF-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dip"
        android:layout_above="@+id/privateRelativeLay"
        >
        <ListView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/conversationList"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </RelativeLayout>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dip"

        android:id="@+id/privateRelativeLay">

        <ListView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/privateConversationList"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

    </RelativeLayout>

    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:dividerHeight="1dp" />
</android.support.v4.widget.DrawerLayout>


它们显示在彼此的顶部,因为您将它们放在具有相同定位属性(无)的单独相对位置中

一种修复方法是将两个列表视图放在一个线性布局中。您可以为该线性布局提供垂直或水平方向属性,具体取决于您希望如何显示它们,然后使用
layout\u weight
属性确定每个ListView占据屏幕的哪个部分

例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
</ListView>

<ListView
    android:id="@+id/listView2"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
</ListView>
</LinearLayout>


注意:
fill\u parent
是遗留的。改为使用
匹配父视图。

这是因为两个列表视图的高度都是填充父视图。尝试使用“包裹内容”(wrap content),或者在您的情况下,我不知道您希望这两个列表视图的显示方式,但我建议您使用具有所需方向的线性布局,并指定权重

只要覆盖整个屏幕的宽度和高度,布局就会相对堆叠


另外,现在不推荐使用fill_parent属性值,最好使用match_parent。

如果有人想查看整个代码,我已经在这个粘贴箱中发布了所有代码:。谢谢……:)为什么要使用抽屉式布局?为什么它里面有相对论作为包装?您应该在问题中详细说明这些选项。@wvdz:Drawer布局用于显示导航抽屉。与此问题无关。相对布局,我不知道,我想我在开始这个项目时就发现了一些这样的东西,对Android不太了解。谢谢。:-)这工作做得很好。您知道如何在两个列表之间添加分隔符,以便用户知道这是一个不同的列表吗?谢谢。我可以想出三种解决办法。您可以为LinearLayout设置背景色,并将上下边距应用于ListView。您还可以定义边框资源,并在每个listview周围放置边框,如下所示:。第三种解决方案是在列表之间放置另一个视图对象。请检查有关向UI添加对象的问题:。非常感谢…-)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
</ListView>

<ListView
    android:id="@+id/listView2"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
</ListView>
</LinearLayout>