带有两个片段的单个屏幕滚动(Fragment和ListFragment)

时间:2015-07-03 03:46:52

标签: android android-layout android-listfragment

我有一个活动有时会显示两个片段,一个片段直接在另一个片段之上。顶部片段只包含几个TextViews,很好。下面是一个ListFragment,它使用SimpleCursorAdapter填充自己的布局。

问题是较低的片段独立于其他所有片段滚动,因此顶部片段始终可见。我希望整个屏幕都能滚动。

我在顶部的布局中尝试了一个静态片段(导致其他问题),将FrameLayout调整为线性/相对,嵌套片段无效。我得到的最好的是硬编码下部片段的高度(例如1000dp),然后至少改变滚动行为。不幸的是,这不是一个有用的解决方案。我知道主布局中的顶级RelativeLayout需要在a中,但这并不能解决ListFragment嵌套滚动问题。

这两个片段本身都很有用,当我向他们显示问题出现时。

是否有某种方法可以强制我的ListFragment以不可滚动的方式显示其所有数据,以便我可以将整个主屏幕滚动为一个?

当前的主要布局 activity_main.xml 是:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/container_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:orientation="vertical">

            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar" />
        </LinearLayout>

        <FrameLayout
            android:id="@+id/container_top"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/container_toolbar"/>
        <FrameLayout
            android:id="@+id/container_bottom"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/container_bottom"/>
    </RelativeLayout>

    <fragment
        android:id="@+id/fragment_navigation_drawer"
        android:name="activity.FragmentDrawer"
        android:layout_width="@dimen/nav_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"
        tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

第二个(ListFragment)布局 fragment_calculations_list 是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/listview_row"
    android:background="@drawable/border_style"
    android:id="@+id/calclist">
    <TextView
        android:id="@+id/date_m_d"
        android:text="05.23"
        style="@style/listview_row_left_top"
        />
    <TextView
        android:id="@+id/title"
        android:layout_below="@id/date_m_d"
        style="@style/listview_row_left_bottom"
        />
    <TextView
        android:id="@+id/value"
        android:layout_toRightOf="@id/date_m_d"
        style="@style/listview_row_right_top" />
    <TextView
        android:id="@+id/value_detail"
        android:layout_below="@+id/value"
        android:layout_toRightOf="@id/date_m_d"
        style="@style/listview_row_right_bottom" />
    <TextView
        android:id="@+id/value_detail2"
        android:layout_below="@+id/value"
        android:layout_toRightOf="@id/value_detail"
        style="@style/listview_row_right_bottom_second" />
</RelativeLayout>

因为它被引用(删除不必要的东西,如颜色)

<style name="listview_row">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>

ListFragment适配器在onCreate中设置:

@Override
public void onCreate(Bundle savedInstanceState) {
    if (getArguments() != null) {
        pID = getArguments().getInt("id");
    }
    else {
        throw new IllegalArgumentException("Referenced without valid id");
    }

    String[] selectArgs = {Integer.toString(pID)};
    super.query = "myqueryhere";
    super.queryArgs = myArgs;

    SimpleCursorAdapter adapter=
        new SimpleCursorAdapter(getActivity(), R.layout.fragment_calculations_list, current,
            new String[] {
                "fielda","fieldb", "fieldc", "fieldd", "fielde"
            },
            new int[] {R.id.date_m_d, R.id.title, R.id.value, R.id.value_detail, R.id.value_detail2},
        0);

    setListAdapter(adapter);

    if (current==null) {
        db = new DatabaseHelper(getActivity().getApplicationContext(), "my.db", 1);
        task=new LoadCursorTask().execute();
    }
}

1 个答案:

答案 0 :(得分:1)

我需要一段时间来设置一个示例,以确定哪些方法可行,但我有一些想法,您可能需要考虑尝试:

  • 不要使用SimpleCursorAdapter进行ListFragment,而是使用HeaderViewListAdapter进行检查。我从来没有使用其中的一个,所以我无法真正告诉你如何设置headerViewInfos ArrayList,但如果你能弄清楚如何使用它,那么这个描述听起来就像你想要的那样。

  • 您可以考虑将片段合并到ScrollView中。虽然我不知道这对ListFragment有多好,但是你可以尝试一下。

所以这并不是一个明确的答案,但是如果没有其他人回答,你可能会走下去,所以你不会走到尽头。