web-dev-qa-db-ja.com

ListViewにフッターを追加する方法は?

私はアプリケーションを開発しています、私のアプリケーションでは、DOM解析を使用してデータを表示するためにリストビューを使用しています、リストビューでフッターしたい、フッターをクリックすると追加のデータがリストビューに追加されますプロセス、image1とimgae2を参照してください。赤い長方形のフッターに言及します

図1-「その他のニュース」のようなフッター
alt text

alt text

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

87
JohnNick

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

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);
    }
}
203
Shaireen

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

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が、提供されたカーソルを、ヘッダービューとフッタービューにも対応するカーソルでラップできるようにするためです。

KitKatから、これは変更されました。

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

ドキュメント

9
Aniket Thakur

私はこれが非常に古い質問であることを知っていますが、ここで私の方法をグーグルで調べて、答えが100%満足ではないことを見つけました。なぜなら、gcl1が言及したようにリストに。

結論-ここでグーグルをするかもしれない他の人のために-私はここで次の提案を見つけました: 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>
9
Ofer Lando

ListViewがListActivityの子である場合:

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

(onCreate()内)

5
Andrey

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

  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>
2
Xar E Ahmer

この質問では、ベストアンサーはうまくいきません。その後、リストビューフッターを表示するこのメソッドを見つけました、

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>

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

0
Kusal Thiwanka