【问题标题】:Android auto merge two listview in one screenAndroid 自动在一个屏幕中合并两个列表视图
【发布时间】:2013-10-02 04:23:04
【问题描述】:

我的看法是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

 <!--list 1-->
<ListView
    android:id="@+id/lvMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="@android:color/transparent"
    android:layout_marginBottom="10dp" />

 <!--the header-->
<LinearLayout
android:id="@+id/llIndustries"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/dark_grey_title_bar"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingTop="5dp" >
 <TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/industry_clusters"
    android:textSize="16sp"/>
 </LinearLayout>

  <!--list 2-->
  <ListView
    android:id="@+id/lvIndustries"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:cacheColorHint="@android:color/transparent" />
 </LinearLayout>

我使用两个自定义适配器来显示两个列表视图(列表视图数据源完全不同):

private List<MenuInfo> menuData;
private List<MenuInfo> industriesData;

lvMenu = (ListView) layoutRoot.findViewById(R.id.lvMenu);
lvIndustries = (ListView) layoutRoot.findViewById(R.id.lvIndustries);

menuAdapter = new MenuAdapter(getActivity(), menuData);
lvMenu.setAdapter(menuAdapter); 

industriesAdapter = new MenuAdapter(getActivity(), industriesData);     
lvIndustries.setAdapter(industriesAdapter);

我的期望是:

 <ListView/> <!-- listview 1-->
 <TextView/> <!-- header-->
 <ListView/> <!-- listview 2-->

但问题是两个列表视图自动合并为一个ListView,并且标题TextView消失(如果有一个ListView,标题将显示)。
我不知道这个问题。你能告诉我哪里错了吗?

【问题讨论】:

  • 请简要介绍您的问题。

标签: android android-listview


【解决方案1】:

试试下面的例子: 布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="3" >

    <ListView
        android:id="@+id/list2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/face"
        android:cacheColorHint="#00000000" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Header"
            android:visibility="visible" />

        <ListView
            android:id="@+id/list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/background"
            android:cacheColorHint="#00000000" />
    </LinearLayout>



</LinearLayout>

在你的课堂上

 ListViewAdapter arrayAdapter = new ListViewAdapter(this, values);

            listview.setAdapter(arrayAdapter);

        ListViewAdapter arrayAdapter2 = new ListViewAdapter(this, values2);

            listview2.setAdapter(arrayAdapter2);

在 onCreate 中添加这两行与您的列表视图:

Utility.setListViewHeightBasedOnChildren(listview);
        Utility.setListViewHeightBasedOnChildren(listview2);

在你的 Activity 中创建一个内部类:

//Test scrollview custom
    public static class Utility {
        public static void setListViewHeightBasedOnChildren(ListView listView) {
            ListAdapter listAdapter = listView.getAdapter(); 
            if (listAdapter == null) {
                // pre-condition
                return;
            }

            int totalHeight = 0;
            for (int i = 0; i < listAdapter.getCount(); i++) {
                View listItem = listAdapter.getView(i, null, listView);
                listItem.measure(0, 0);
                totalHeight += listItem.getMeasuredHeight();
            }

            ViewGroup.LayoutParams params = listView.getLayoutParams();
            params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
            listView.setLayoutParams(params);
        }
    }

代码取自:listViewNotScrolling

它肯定会工作! :)

【讨论】:

  • 谢谢,它也对我有用。但是第二个列表视图总是滚动(我不希望两个列表视图都可以滚动,而是根布局应该是可滚动的)。我尝试为列表视图设置android:scrollbars="none" 并为根布局添加滚动视图,但不起作用。你能推荐任何想法吗?
  • 您只希望第一个 listView 滚动而不是第二个?
  • 我希望两个列表视图都不要滚动。根布局包含 2 个列表视图应该是可滚动的。
  • 你不应该在 ScrollView 中使用 ListView。你可以做的是在 ScrollView 中简单地使用 LinearLayout
  • 我不知道这些是否有效,但你可以试试:1.scollLIst 2.anotherLink
【解决方案2】:

如果你想用 Header 创建 Listview。然后使用Section Header Listview。

参考this 示例。

希望对你有帮助!!

如果它修复了它们之间只有两个 Listview 和一个 Header

然后

1) 只取一个 Listview。

2) 对 Listview 行使用自定义适配器和自定义布局。

3) 在自定义布局中添加两个额外的TextView

列出第一个 ListView 数据

  • (固定 TextView - 标题 - 使其可见性可见)
  • (额外 1 个文本视图 - 标题 - 将其可见性消失)
  • (额外 2 TextView - 标题 - 将其可见性消失)

列出第二个 ListView 数据

  • (固定 TextView - 标题 - 使其可见性消失)
  • (额外 1 个 TextView - Header - 将其可见性置于 VISIBLE 中)
  • (额外2个TextView - Header - 将其可见性可见)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2013-12-04
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多