リストビューにフッターを追加する方法は?


88

私はアプリケーションを開発しています。私のアプリケーションでは、dom解析を使用してデータを表示するためにリストビューを使用しています。リストビューにフッターを付けたいです。プロセス、image1とimgae2を参照してください。赤い四角形のフッターについて説明します

「その他のニュース」のようなFig1-Footer
代替テキスト

代替テキスト

図2-リストビューに追加された10レコードを追加

回答:


205

フッターとして設定するテキストで構成されるフッタービューレイアウトを作成して、

View footerView = ((LayoutInflater) ActivityContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false);
ListView.addFooterView(footerView);

フッターのレイアウトは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="7dip"
    android:paddingBottom="7dip"
    android:orientation="horizontal"
    android:gravity="center">

    <LinearLayout 
        android:id="@+id/footer_layout" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_gravity="center">

    <TextView 
        android:text="@string/footer_text_1" 
        android:id="@+id/footer_1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="14dip" 
        android:textStyle="bold" 
        android:layout_marginRight="5dip" />
    </LinearLayout>
</LinearLayout> 

アクティビティクラスは次のとおりです。

public class MyListActivty extends ListActivity {
    private Context context = null;
    private ListView list = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        list = (ListView)findViewById(android.R.id.list);

        //code to set adapter to populate list
        View footerView =  ((LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_layout, null, false);
        list.addFooterView(footerView);
    }
}

7
これは良いことですが、フッターを一番下までスクロールしたときにだけ表示されるのではなく、画面上で固定したい場合はどうでしょうか。また、リストが空の場合でもフッターを表示したい場合はどうでしょうか。stackoverflow.com/questions/12353701/…で完全な質問を参照してください。
gcl1 '10 / 09/12

33
このコードを機能させるのにいくつか問題があり、解決しました。addFooterView()のドキュメントにあるNOTE: Call this before calling setAdapter. This is so ListView can wrap the supplied cursor with one that will also account for header and footer views.
demosten

13
@ gcl1その場合、それはフッターではなく、リストビューの下にあるレイアウトの通常の要素だけです。ちょうど、あなたはそれをリストビューの下に置きますか?
Davor 2013

2
@demonstenに一言:ビューを追加する前にsetAdapter()を呼び出すと、悪い時間が発生します。
Ben Ogorek 2014年

1
アダプターにデータがない場合、フッターはアタッチされていません(表示)。アダプターにデータがない場合でも、フッターをどのように表示できますか?感謝
Kalpesh Lakhani 2014

10

ここでの回答は少し時代遅れです。コードは同じままですが、動作にいくつかの変更があります。

public class MyListActivity extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        TextView footerView = (TextView) ((LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false);
        getListView().addFooterView(footerView);
        setListAdapter(new ArrayAdapter<String>(this, getResources().getStringArray(R.array.news)));
    }
}

addFooterView()方法に関する情報

リストの下部に表示される固定ビューを追加します。addFooterView()が複数回呼び出された場合、ビューは追加された順序で表示されます。この呼び出しを使用して追加されたビューは、必要に応じてフォーカスを取得できます。

上記の答えのほとんどは非常に重要なポイントを強調しています-

addFooterView()を呼び出す前に呼び出す必要がありますsetAdapter()。これにより、ListViewは、指定されたカーソルを、ヘッダービューとフッタービューも考慮するカーソルでラップできます。

キットカットからこれは変更されました。

注:最初に導入されたとき、このメソッドはsetAdapter(ListAdapter)でアダプタを設定する前にのみ呼び出すことができました。KITKAT以降、このメソッドはいつでも呼び出すことができます。ListViewのアダプターがHeaderViewListAdapterを拡張しない場合、WrapperListAdapterのサポートインスタンスでラップされます。

ドキュメンテーション


9

私はこれが非常に古い質問であることを知っていますが、gcl1が言及したように、この方法ではフッターは実際には画面へのフッターではないため、ここでは自分の方法をググったところ、100%満足のいく答えが得られなかったことがわかりました。これは単なる「アドオン」です。 "リストへ。

結論 -ここでグーグルするかもしれない他の人のために-私はここに次の提案を見つけました:ListFragmentの下に修正され常に表示されるフッター

次のようにしてみてください。XMLの最初にリストされているボタン(または任意のフッター要素)が強調されており、リストは「layout_above」として追加されます。

<RelativeLayout>

<Button android:id="@+id/footer" android:layout_alignParentBottom="true"/> 
<ListView android:id="@android:id/list" **android:layout_above**="@id/footer"> <!-- the list -->

</RelativeLayout>

6

ListViewがListActivityの子である場合:

getListView().addFooterView(
    getLayoutInflater().inflate(R.layout.footer_view, null)
);

(onCreate()内)


2

リストビューフッターを追加するアクティビティと、リストビューフッターのクリック時にイベントを生成します。

  public class MainActivity extends Activity
{

        @Override
        protected void onCreate(Bundle savedInstanceState)
         {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            ListView  list_of_f = (ListView) findViewById(R.id.list_of_f);

            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = inflater.inflate(R.layout.web_view, null);  // i have open a webview on the listview footer

            RelativeLayout  layoutFooter = (RelativeLayout) view.findViewById(R.id.layoutFooter);

            list_of_f.addFooterView(view);

        }

}

activity_main.xml

<?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="match_parent"
    android:background="@drawable/bg" >

    <ImageView
        android:id="@+id/dept_nav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/dept_nav" />

    <ListView
        android:id="@+id/list_of_f"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/dept_nav"
        android:layout_margin="5dp"
        android:layout_marginTop="10dp"
        android:divider="@null"
        android:dividerHeight="0dp"
        android:listSelector="@android:color/transparent" >
    </ListView>

</RelativeLayout>

0

この質問では、最善の答えは私にはうまくいきません。その後、私はこのメソッドを見つけてリストビューフッターを表示しました、

LayoutInflater inflater = getLayoutInflater();
ViewGroup footerView = (ViewGroup)inflater.inflate(R.layout.footer_layout,listView,false);
listView.addFooterView(footerView, null, false);

そして、新しいレイアウト呼び出しfooter_layoutを作成します

<?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">
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Done"
        android:textStyle="italic"
        android:background="#d6cf55"
        android:padding="10dp"/>
</LinearLayout>

動作しない場合は、この記事を参照して聞いてください


0

あなたはstackLayoutを使用することができ、このレイアウトの内側にリストをフレームに入れることができます、例えば:

<StackLayout VerticalOptions="FillAndExpand">
            <ListView  ItemsSource="{Binding YourList}"
                       CachingStrategy="RecycleElement"
                       HasUnevenRows="True">

                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell >
                            <StackLayout  Orientation="Horizontal">
                                <Label Text="{Binding Image, Mode=TwoWay}" />

                            </StackLayout>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <Frame BackgroundColor="AliceBlue" HorizontalOptions="FillAndExpand">
                <Button Text="More"></Button>
            </Frame>
        </StackLayout>

これが結果です:

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.