我有一个活动有时会显示两个片段,一个片段直接在另一个片段之上。顶部片段只包含几个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();
}
}
答案 0 :(得分:1)
我需要一段时间来设置一个示例,以确定哪些方法可行,但我有一些想法,您可能需要考虑尝试:
不要使用SimpleCursorAdapter进行ListFragment,而是使用HeaderViewListAdapter进行检查。我从来没有使用其中的一个,所以我无法真正告诉你如何设置headerViewInfos ArrayList,但如果你能弄清楚如何使用它,那么这个描述听起来就像你想要的那样。
您可以考虑将片段合并到ScrollView中。虽然我不知道这对ListFragment有多好,但是你可以尝试一下。
所以这并不是一个明确的答案,但是如果没有其他人回答,你可能会走下去,所以你不会走到尽头。