2013-06-22 29 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