2013-06-22 26 views
2

我有一个扩展了ListFragment的类。我想添加一个固定的标题。如何在ListFragment中添加固定标题

我试着这样说:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    View mHeaderView = getActivity().getLayoutInflater().inflate(R.layout.remedy_header_view, null);    
    getListView().addHeaderView(mHeaderView); 
    if (mAdapter == null) { 
     int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? android.R.layout.simple_list_item_activated_1: android.R.layout.simple_list_item_1; 
     mAdapter = new SimpleCursorAdapter(getActivity(), layout, null, new String[] { ClinicalTip.Remedies.COLUMN_NAME_REMEDY_NAME }, new int[] { android.R.id.text1 }, 0); 
    } 
    setListAdapter(mAdapter); 
    setListShown(false); 
    Activity().getSupportLoaderManager().initLoader(0, null, this); 
} 

@Override 
public void onDestroyView() { 
    // TODO Auto-generated method stub 
    super.onDestroyView(); 
    setListAdapter(null); 
} 

但是,使用这种方法,头不动,它就会滚动。 什么可能是在ListFragment中添加固定标题的解决方案?

回答

5

ListViewheaderView滚动与ListView的其它元件。如果你想有一个修正的headerView,而ListView的元素在它下面滚动,你必须改变你在onCreateView里面返回的布局。例如:

<?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" > 

<TextView 
    android:id="@+id/header" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="myHeader" /> 

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


</LinearLayout> 

例如:

View detailListHeader ; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, 
     savedInstanceState); 
    View view = inflater.inflate(R.layout.myxml, container, false); 
    detailListHeader = view.findViewById(R.id.header); 
    return view; 
} 

detailListHeader是你的头

+0

如何在ListFragment中使用这个? – Homam

+0

我正在使用你的代码,但我得到这个错误:“java.lang.IllegalStateException:不能与自定义内容视图一起使用” – Homam

+0

尝试调用super.onCreateView(inflater,container, savedInstanceState);在任何其他操作之前。另外我注意到你正在使用setListShow(boolean)。看看这里:http://code.google.com/p/android/issues/detail?id=21742 – Blackbelt

0

显然它会滚动列表。
而不是这样做,在ListView顶部设置一个视图,并添加您的标题视图的内容。

通过这样做,标题视图将始终保持静态,但列表将可滚动。

此外,如果您只想将它​​与List Fragment一起使用,那么:
ListFragment具有由单个列表视图组成的默认布局。但是,如果您愿意,您可以通过从onCreateView(LayoutInflater,ViewGroup,Bundle)返回自己的视图层次结构来自定义片段布局。为此,您的视图层次结构必须包含一个ID为“@android:id/list”的ListView对象(或者列表,如果它在代码中)。

所以你的布局文件看起来像。

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

`<TextView android:id="@id/header" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" />` 

`<ListView android:id="@id/android:list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" />` 

</LinearLayout>

+0

我怎么做你正在使用ListFragment在暗示什么? – Homam

+0

如果在列表片段中使用此任何问题,请使用简单片段。只要确保在该片段的布局中,您有一个始终位于列表视图的顶部(或之前)的视图。 – akkilis

+0

列表片段是一种使用列表的简单方法,因为它提供了一些更多重写的方法,但目的也将由普通片段解决。 – akkilis