2011-06-28 8 views
2

listFragment内のリストビューに単純な静的ヘッダーを追加するにはどうすればよいですか?私は、XMLのdefからヘッダを作成し、それをインフレーションで追加したいと思います。onCreateViewのlistFragmentに静的ヘッダーを追加する

マイonCreateViewは:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) { 
    View detailList = inflater.inflate(R.layout.detail_fragment, container, false); 
    View detailListHeader = inflater.inflate(R.layout.daily_sales_header, null, false); 
    container.addView(detailListHeader, 0); 
    return detailList; 
} 

これは、ヘッダーを作成しますが、ヘッダーは、リストビューを重ねている。すなわちリストビューは、ヘッダの下に表示されますむしろそれは、リストビューの上ではありません。

正しい実装についてのヒントはありますか?

答えて

3

onCreateView()のコンテナに直接ビューを追加してはいけません。ドキュメントを読んでください:http://developer.android.com/reference/android/app/Fragment.html#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)

はまた、フラグメントのドキュメント内のさまざまなサンプルコードだけでなく、APIのデモを参照してください。http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html

ここフラグメントの使用に関する特別なものは何もありません。通常はアクティビティや他の場所にあるようなListViewを含むビュー階層を構築するだけです。あなたは常にonCreateViewから1つのViewを返す必要があります。これが階層のルートです。リストビューを作成し、それにヘッダを追加するためにこれを使用することができますたとえば

http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)の回答が来る前に彼の答えは、より多くの質問を作成したので、

+5

これは元の質問に答えているかどうかわかりません。質問は静的なヘッダーに関するものでした。私はこれがリストのビューの外にあることを意味します。 addHeaderViewは、リスト項目をスクロールする項目をリストに追加します。 – Du3

+0

この投稿は質問に答えることはできません、私はOPがそれを受け入れた理由を疑問に思います – meda

8

はあなたのためのコードにhackbodの説明を置きます。時々私は魚がほしいと思う。あなたがこれを行うあなたのonCreateView方法では、

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

    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/header" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="6dp" 
     android:textStyle="bold" 
     android:textSize="20sp" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="false" /> 

    <TextView 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

その後:私はいつもこのようになりますレイアウトを作成し、

を開始するには...ネットが作られる方法を知っておく必要はありません

を私のヘッダがテです

// get the header view 
TextView headerView = (TextView) getView().findViewById(R.id.header); 
headerView.setText("Header text goes here"); 

お知らせ:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.myListViewWithHeader, null); 
    return view; 
} 

ヘッダは今、これを行うことによって移入することができます必要に応じて別のビューに置き換えることができます。その場合、getView()を実行する必要があります。作業するヘッダー内の各ビューのfindViewById(R.id.xxxxx)

関連する問題